objectiveai-sdk 2.0.6

ObjectiveAI SDK, definitions, and utilities
Documentation
pub mod any_of;
pub mod array;
pub mod audio;
pub mod boolean;
pub mod file;
pub mod image;
pub mod integer;
pub mod multi;
pub mod number;
pub mod object;
pub mod optional;
pub mod string;
pub mod video;

#[cfg(test)]
mod array_tests;
#[cfg(test)]
mod tests;

use rand::rngs::StdRng;
use rand::SeedableRng;

use crate::functions::expression::{InputValue, InputSchema};

pub fn permutations(schema: &InputSchema) -> usize {
    optional::inner_permutations(schema)
}

pub fn generate(schema: &InputSchema) -> Generator {
    generate_seeded(schema, StdRng::from_os_rng())
}

pub fn generate_seeded(schema: &InputSchema, rng: StdRng) -> Generator {
    let perms = permutations(schema);
    Generator {
        inner: multi::generate(schema, rng),
        remaining: perms,
    }
}

pub struct Generator {
    inner: multi::Generator,
    remaining: usize,
}

impl Iterator for Generator {
    type Item = InputValue;
    fn next(&mut self) -> Option<InputValue> {
        if self.remaining == 0 {
            return None;
        }
        self.remaining -= 1;
        self.inner.next()
    }
}