datagen-rs 0.1.0

A random data generator written in rust
Documentation
use crate::generate::generated_schema::GeneratedSchema;
use crate::util::types::Result;
use rand::prelude::SliceRandom;
use std::sync::Arc;

pub enum ResolvedReference {
    Single(Arc<GeneratedSchema>),
    Multiple(Vec<Arc<GeneratedSchema>>),
    None,
}

impl ResolvedReference {
    pub fn none() -> Self {
        Self::None
    }

    pub fn single(schema: GeneratedSchema) -> Self {
        Self::Single(Arc::new(schema))
    }

    pub fn multiple(schemas: Vec<Arc<GeneratedSchema>>) -> Self {
        Self::Multiple(schemas)
    }

    pub fn into_random(self) -> Result<Arc<GeneratedSchema>> {
        Ok(match self {
            Self::Single(schema) => schema,
            Self::Multiple(schemas) => schemas
                .choose(&mut rand::thread_rng())
                .ok_or("Failed to choose random schema value")?
                .clone(),
            Self::None => Arc::new(GeneratedSchema::None),
        })
    }

    pub fn into_vec(self) -> Option<Vec<Arc<GeneratedSchema>>> {
        match self {
            Self::Single(schema) => Some(vec![schema]),
            Self::Multiple(schemas) => Some(schemas),
            Self::None => None,
        }
    }
}