pub mod idiom;
pub mod parts;
pub mod statements;
pub mod utils;
use std::time;
use arbitrary::{Arbitrary, Result, Unstructured};
pub use idiom::*;
pub use parts::*;
use rust_decimal::Decimal;
pub use utils::*;
use crate::changefeed::ChangeFeed;
use crate::statements::SleepStatement;
impl<'a> Arbitrary<'a> for ChangeFeed {
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
Ok(Self {
expiry: u.arbitrary()?,
store_diff: bool::arbitrary(u)?,
})
}
}
impl<'a> Arbitrary<'a> for SleepStatement {
fn arbitrary(_u: &mut Unstructured<'a>) -> Result<Self> {
Ok(Self {
duration: time::Duration::new(0, 0),
})
}
}
pub fn arb_decimal<'a>(u: &mut Unstructured<'a>) -> Result<Decimal> {
Ok(Decimal::arbitrary(u)?.normalize())
}
pub fn arb_bytes<'a>(u: &mut Unstructured<'a>) -> Result<::bytes::Bytes> {
Ok(::bytes::Bytes::copy_from_slice(u.arbitrary()?))
}
pub fn arb_regex<'a>(u: &mut Unstructured<'a>) -> Result<regex::Regex> {
let ast = regex_syntax::ast::Ast::arbitrary(u)?;
let src = ast.to_string();
if src.is_empty() {
return Err(arbitrary::Error::IncorrectFormat);
}
regex::RegexBuilder::new(&src).build().map_err(|_| arbitrary::Error::IncorrectFormat)
}