Skip to main content

objectiveai_sdk/functions/check/example_inputs/
mod.rs

1pub mod any_of;
2pub mod array;
3pub mod audio;
4pub mod boolean;
5pub mod file;
6pub mod image;
7pub mod integer;
8pub mod multi;
9pub mod number;
10pub mod object;
11pub mod optional;
12pub mod string;
13pub mod video;
14
15#[cfg(test)]
16mod array_tests;
17#[cfg(test)]
18mod tests;
19
20use rand::rngs::StdRng;
21use rand::SeedableRng;
22
23use crate::functions::expression::{InputValue, InputSchema};
24
25pub fn permutations(schema: &InputSchema) -> usize {
26    optional::inner_permutations(schema)
27}
28
29pub fn generate(schema: &InputSchema) -> Generator {
30    generate_seeded(schema, StdRng::from_os_rng())
31}
32
33pub fn generate_seeded(schema: &InputSchema, rng: StdRng) -> Generator {
34    let perms = permutations(schema);
35    Generator {
36        inner: multi::generate(schema, rng),
37        remaining: perms,
38    }
39}
40
41pub struct Generator {
42    inner: multi::Generator,
43    remaining: usize,
44}
45
46impl Iterator for Generator {
47    type Item = InputValue;
48    fn next(&mut self) -> Option<InputValue> {
49        if self.remaining == 0 {
50            return None;
51        }
52        self.remaining -= 1;
53        self.inner.next()
54    }
55}