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
74
75
76
77
78
79
80
81
82
83
84
85
use cryptonote_basic::Version;

pub struct BlockFiles {
  pub main: String,
  pub index: String,
  pub cache: String,
  pub chainIndex: String,
}

pub enum NetType {
  Main,
  Test,
}

pub struct Config {
  pub prefix: u64,
  pub coinName: String,
  pub genesisCoinBaseTxHex: String,
  pub version: Version,
  pub files: BlockFiles,
  pub net: NetType,
}

impl Config {
  pub fn new(
    prefix: u64,
    files: BlockFiles,
    coinName: String,
    genesisCoinBaseTxHex: String,
    version: Version,
    net: NetType,
  ) -> Config {
    Config {
      prefix,
      coinName,
      files,
      genesisCoinBaseTxHex,
      version,
      net,
    }
  }
}

impl BlockFiles {
  pub fn new(files: [String; 4]) -> BlockFiles {
    BlockFiles {
      main: files[0].to_string(),
      index: files[1].to_string(),
      cache: files[2].to_string(),
      chainIndex: files[3].to_string(),
    }
  }
}

#[cfg(test)]

mod tests {
  use super::*;
  #[test]
  fn should_create_coin_files() {
    let files = BlockFiles::new([
      String::from("a"),
      String::from("b"),
      String::from("c"),
      String::from("d"),
    ]);
    assert!(files.main == "a");
    assert!(files.index == "b");
    assert!(files.cache == "c");
    assert!(files.chainIndex == "d");
    let config = Config::new(
      0x3d,
      files,
      String::from("vigcoin"),
      String::from("aaa"),
      Version {
        major: 1,
        minor: 0,
        patch: 0,
      },
      NetType::Main,
    );
    assert!(config.coinName == "vigcoin");
  }
}