1#[derive(Debug, Clone, serde::Deserialize)]
2pub struct Config {
3 pub input_dir: String,
4 pub output_dir: String,
5 #[serde(default)]
6 pub common_texts: Vec<String>,
7 pub images: Vec<ImageConfig>,
8}
9
10#[derive(Debug, Clone, serde::Deserialize)]
11pub struct ImageConfig {
12 pub name: String,
13 #[serde(default)]
14 pub texts: Vec<String>,
15 #[serde(default)]
16 pub raw: bool,
17}
18
19impl Config {
20 pub fn load() -> Self {
21 let f = std::fs::File::open("config.yml").expect("failed opening config file");
22 serde_yaml::from_reader(f).expect("failed parsing config file")
23 }
24
25 pub fn create_uniform_distribution(&self) -> Vec<MemeIndex> {
26 let mut uniform_dist = vec![];
27 for (idx, c) in self.images.iter().enumerate() {
28 if c.raw {
29 uniform_dist.push(MemeIndex::new(idx, 0));
30 } else {
31 for t_idx in 0..self.common_texts.len() {
32 uniform_dist.push(MemeIndex::new(idx, t_idx));
33 }
34 for t_idx in 0..c.texts.len() {
35 uniform_dist.push(MemeIndex::new(idx, self.common_texts.len() + t_idx));
36 }
37 }
38 }
39 uniform_dist
40 }
41}
42
43#[derive(Debug, Clone)]
44pub struct MemeIndex {
45 pub image_idx: usize,
46 pub text_idx: usize,
47}
48
49impl MemeIndex {
50 pub fn new(image_idx: usize, text_idx: usize) -> Self {
51 MemeIndex {
52 image_idx,
53 text_idx,
54 }
55 }
56}