summaryrefslogtreecommitdiffstats
path: root/src/types.h
blob: 0d870cfbe0c86b4741abea8031b6e6eaf140148b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#ifndef __TYPES_H
#define __TYPES_H

typedef struct item_t {
  char *name;
  char *qty;
} item;

enum step_type {
  PREP = 0,
  COOK,
  SERVE,
};

typedef struct step_t {
  char *inst;
  char *duration;
  char *result;
  enum step_type type;
} step;

typedef struct recipe_t {
  char * filename;
  char * path;
  char * title;
  int n;
  item **i;
  int in;
  step **s;
  int sn;
  struct recipe_t **r;
  int rn;
} recipe;

recipe * new_recipe();
void new_subrecipe(recipe * r, recipe * src);
void new_item(recipe * r);
void new_step(recipe * r);

void free_recipe(recipe * r);
void free_item(item * i);
void free_step(step * s);

void pprint_items(recipe * r);
void show(recipe * r);
void tojson(recipe * r);
void tohtml(recipe * r);
void torcp(recipe * r);

/* Operations */

/**
 * Copy metadata from `src` to `dst`
 */
void copy_metadata(recipe * dst, recipe * src);

/**
 * Copy top level items from `src` to `dst`
 */
void copy_items(recipe * dst, recipe * src);

/**
 * Merge all items from `src` and add them to `dst`
 */
void merge_items(recipe * dst, recipe * src);

/**
 * Sum all top level item qtys in `src` and add them to `dst`
 * making sure each item name exists only once.
 */
void distinct_sum_items(recipe * dst, recipe * src);

#endif /* __TYPES_H */