pub struct ValAccessor { /* private fields */ }Expand description
ValAccessor manage the option value and raw value.
§Example
let ctx = Ctx::default().with_inner_ctx(InnerCtx::default());
{
let mut value = ValAccessor::fallback::<i32>();
let raw_value = OsStr::new("123");
value.initialize()?;
value.set(vec![1, 4]);
value.store_all(Some(&raw_value), &ctx, &Action::App)?;
assert_eq!(value.pop::<i32>(), Some(123));
assert_eq!(value.rawval()?, &raw_value);
}
{
let mut value =
ValAccessor::new(ValStorer::fallback::<i32>(), ValInitializer::new_values(vec![7]));
let raw_value = OsStr::new("42");
value.initialize()?;
value.store_all(Some(&raw_value), &ctx, &Action::Set)?;
assert_eq!(value.pop::<i32>(), Some(42));
assert_eq!(value.rawval()?, &raw_value);
}
{
let validator = ValValidator::range_from(-32i32);
let mut value = ValAccessor::new_validator(validator, ValInitializer::fallback());
let raw_value1 = OsStr::new("8");
value.initialize()?;
value.set(vec![1, 4]);
assert_eq!(
value.store_all(Some(&raw_value1), &ctx, &Action::App)?,
true
);
assert_eq!(value.pop::<i32>(), Some(8));
assert_eq!(value.rawval()?, &raw_value1);
let raw_value2 = OsStr::new("-66");
assert!(value.store_all(Some(&raw_value2), &ctx, &Action::App).is_err());
assert_eq!(value.pop::<i32>(), Some(4));
assert_eq!(value.rawval()?, &raw_value1);
}
{
let validator = ValValidator::range_to(-42);
let mut value =
ValAccessor::new_validator(validator, ValInitializer::new_values(vec![-88, 1]));
let raw_value1 = OsStr::new("-68");
value.initialize()?;
assert_eq!(
value.store_all(Some(&raw_value1), &ctx, &Action::Set)?,
true
);
assert_eq!(value.pop::<i32>(), Some(-68));
assert_eq!(value.rawval()?, &raw_value1);
let raw_value2 = OsStr::new("-20");
assert!(value.store_all(Some(&raw_value2), &ctx, &Action::App).is_err());
assert_eq!(value.pop::<i32>(), None);
assert_eq!(value.rawval()?, &raw_value1);
}Implementations§
Source§impl ValAccessor
impl ValAccessor
pub fn new(storer: ValStorer, initializer: ValInitializer) -> Self
pub fn new_validator<U: ErasedTy + RawValParser>( validator: ValValidator<U>, initializer: ValInitializer, ) -> Self
pub fn fallback<U: ErasedTy + RawValParser>() -> Self
pub fn with_storer(self, storer: ValStorer) -> Self
pub fn with_initializer(self, initializer: ValInitializer) -> Self
pub fn set_storer(&mut self, storer: ValStorer) -> &mut Self
pub fn set_initializer(&mut self, initializer: ValInitializer) -> &mut Self
pub fn storer(&self) -> &ValStorer
pub fn initializer(&self) -> &ValInitializer
pub fn storer_mut(&mut self) -> &mut ValStorer
pub fn initializer_mut(&mut self) -> &mut ValInitializer
pub fn handlers(&mut self) -> (&mut Vec<OsString>, &mut AnyValue)
Methods from Deref<Target = AnyValue>§
pub fn clear(&mut self)
pub fn contain_type<T: ErasedTy>(&self) -> bool
pub fn pop<T: ErasedTy>(&mut self) -> Option<T>
pub fn entry<T: ErasedTy>(&mut self) -> Entry<'_, Vec<T>>
Trait Implementations§
Source§impl Debug for ValAccessor
impl Debug for ValAccessor
Source§impl Default for ValAccessor
impl Default for ValAccessor
Source§impl Deref for ValAccessor
impl Deref for ValAccessor
Source§impl DerefMut for ValAccessor
impl DerefMut for ValAccessor
Source§impl ErasedValue for ValAccessor
impl ErasedValue for ValAccessor
fn initialize(&mut self) -> Result<(), Error>
fn store( &mut self, arg: Option<&OsStr>, ctx: &Ctx<'_>, act: &Action, ) -> Result<(), Error>
fn store_act<U: ErasedTy>( &mut self, val: U, _: &Ctx<'_>, act: &Action, ) -> Result<(), Error>
fn val<U: ErasedTy>(&self) -> Result<&U, Error>
fn val_mut<U: ErasedTy>(&mut self) -> Result<&mut U, Error>
fn vals<U: ErasedTy>(&self) -> Result<&Vec<U>, Error>
fn vals_mut<U: ErasedTy>(&mut self) -> Result<&mut Vec<U>, Error>
fn take_val<U: ErasedTy>(&mut self) -> Result<U, Error>
fn take_vals<U: ErasedTy>(&mut self) -> Result<Vec<U>, Error>
fn rawval(&self) -> Result<&OsString, Error>
fn rawval_mut(&mut self) -> Result<&mut OsString, Error>
fn rawvals(&self) -> Result<&Vec<OsString>, Error>
fn rawvals_mut(&mut self) -> Result<&mut Vec<OsString>, Error>
fn take_rawval<U: ErasedTy>(&mut self) -> Result<OsString, Error>
fn take_rawvals<U: ErasedTy>(&mut self) -> Result<Vec<OsString>, Error>
Auto Trait Implementations§
impl Freeze for ValAccessor
impl !RefUnwindSafe for ValAccessor
impl Send for ValAccessor
impl Sync for ValAccessor
impl Unpin for ValAccessor
impl !UnwindSafe for ValAccessor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> ConstructIntoOp for T
impl<T> ConstructIntoOp for T
Source§fn into_box(self) -> WrappedTy<BoxedCtor<T>>
fn into_box(self) -> WrappedTy<BoxedCtor<T>>
Return a type that wraps Ctor with Box.
§Example
let re = b'+'
.or(b'-')
.then(u8::is_ascii_hexdigit)
.then(u8::is_ascii_hexdigit.repeat_times::<3>())
.pat()
.map(|v: &[u8]| String::from_utf8(v.to_vec()).map_err(|_| Error::Uid(0)))
.into_box();
assert_eq!(BytesCtx::new(b"+AE00").ctor(&re)?, "+AE00");
assert!(BytesCtx::new(b"-GH66").ctor(&re).is_err());
assert_eq!(BytesCtx::new(b"-83FD").ctor(&re)?, "-83FD");
Ok(())Source§fn into_rc(self) -> WrappedTy<Rc<T>>
fn into_rc(self) -> WrappedTy<Rc<T>>
Return a type that wrap Ctor with Rc.
§Example
color_eyre::install()?;
let year = char::is_ascii_digit.repeat_times::<4>();
let num = char::is_ascii_digit.repeat_times::<2>();
let date = year.sep_once("-", num.sep_once("-", num)).into_rc();
let time = num.sep_once(":", num.sep_once(":", num));
let datetime = date.clone().sep_once(" ", time);
assert_eq!(
CharsCtx::new("2024-01-08").ctor(&date)?,
("2024", ("01", "08"))
);
assert_eq!(
CharsCtx::new("2024-01-08 10:01:13").ctor(&datetime)?,
(("2024", ("01", "08")), ("10", ("01", "13")))
);
Ok(())Source§fn into_dyn<'a, 'b, C, M, O, H, A>(
self,
) -> WrappedTy<DynamicBoxedCtor<'a, 'b, C, M, O, H, A>>
fn into_dyn<'a, 'b, C, M, O, H, A>( self, ) -> WrappedTy<DynamicBoxedCtor<'a, 'b, C, M, O, H, A>>
§Example 2
color_eyre::install()?;
let num = u8::is_ascii_digit
.repeat_one()
.map(|v: &[u8]| String::from_utf8(v.to_vec()).map_err(|_| Error::Uid(0)))
.map(map::from_str::<usize>());
let num = num.clone().sep_once(b",", num);
let re = num.into_dyn();
assert_eq!(BytesCtx::new(b"3,0").ctor(&re)?, (3, 0));
assert_eq!(BytesCtx::new(b"2,1").ctor(&re)?, (2, 1));
assert_eq!(BytesCtx::new(b"0,3").ctor(&re)?, (0, 3));
Ok(())fn into_arc(self) -> WrappedTy<Arc<T>>
fn into_cell(self) -> WrappedTy<Cell<T>>
fn into_refcell(self) -> WrappedTy<RefCell<T>>
fn into_mutex(self) -> WrappedTy<Mutex<T>>
fn into_dyn_sync<'a, 'b, C, M, O, H, A>( self, ) -> WrappedTy<DynamicBoxedCtorSync<'a, 'b, C, M, O, H, A>>
fn into_dyn_arc<'a, 'b, C, M, O, H, A>( self, ) -> WrappedTy<DynamicArcCtor<'a, 'b, C, M, O, H, A>>
fn into_dyn_rc<'a, 'b, C, M, O, H, A>( self, ) -> WrappedTy<DynamicRcCtor<'a, 'b, C, M, O, H, A>>
Source§impl<'a, C, T> DynamicCreateCtorThenHelper<'a, C> for T
impl<'a, C, T> DynamicCreateCtorThenHelper<'a, C> for T
Source§fn dyn_then_ctor<F>(self, func: F) -> DynamicCreateCtorThen<C, T, F>
fn dyn_then_ctor<F>(self, func: F) -> DynamicCreateCtorThen<C, T, F>
Construct a new regex with Ctor implementation based on previous result.
§Example
let num = u8::is_ascii_digit
.repeat_one()
.map(|v: &[u8]| String::from_utf8(v.to_vec()).map_err(|_| Error::Uid(0)))
.map(map::from_str::<usize>());
let num = num.clone().sep_once(b",", num);
let re = num.dyn_then_ctor(|a: &(usize, usize)| {
// leave the a's type empty cause rustc reject compile
Ok(b'+'
.repeat_range(a.0..a.0 + 1)
.then(b'-'.repeat_range(a.1..a.1 + 1)))
});
assert_eq!(
BytesCtx::new(b"3,0+++").ctor(&re)?,
((3, 0), ([43, 43, 43].as_slice(), [].as_slice()))
);
assert_eq!(
BytesCtx::new(b"2,1++-").ctor(&re)?,
((2, 1), ([43, 43].as_slice(), [45].as_slice()))
);
assert_eq!(
BytesCtx::new(b"0,3---").ctor(&re)?,
((0, 3), ([].as_slice(), [45, 45, 45].as_slice()))
);
Ok(())