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
use crate::builders::ReviewGenerator;
use crate::Result;
use clap::Parser;
use std::io::Write;
use std::path::PathBuf;
use vit_servicing_station_tests::common::data::ProposalTemplate;

#[derive(Parser, Debug)]
pub struct RandomReviewsDataCommandArgs {
    /// Careful! directory would be removed before export
    #[clap(long = "output", default_value = "./reviews.json")]
    pub output_file: PathBuf,

    #[clap(
        long = "proposals",
        default_value = "../resources/external/proposals.json"
    )]
    pub proposals: PathBuf,

    #[clap(long = "assessors-per-proposal-count", default_value = "3")]
    pub assessors_per_proposal_count: u32,
}

impl RandomReviewsDataCommandArgs {
    pub fn exec(self) -> Result<()> {
        let proposals: Vec<ProposalTemplate> =
            serde_json::from_str(&std::fs::read_to_string(&self.proposals)?)?;

        let mut generator = ReviewGenerator::new(self.assessors_per_proposal_count);
        let reviews = generator.generate(proposals)?;
        let content = serde_json::to_string_pretty(&reviews)?;
        let mut file = std::fs::File::create(&self.output_file)?;
        file.write_all(content.as_bytes())?;
        Ok(())
    }
}