pub struct Manager { /* private fields */ }Implementations§
Source§impl Manager
impl Manager
pub fn new() -> Self
pub fn register(&mut self, gen: impl Generator + 'static) -> &mut Self
pub fn find(&self, shell: &str) -> Result<&dyn Generator<Err = Error>, Error>
pub fn find_mut( &mut self, shell: &str, ) -> Result<&mut Box<dyn Generator<Err = Error>>, Error>
pub fn take( &mut self, shell: &str, ) -> Result<Box<dyn Generator<Err = Error>>, Error>
pub fn generate( &self, shell: &str, name: &str, bin: &str, ) -> Result<String, Error>
pub fn write<W>(
&self,
shell: &str,
name: &str,
bin: &str,
w: &mut W,
) -> Result<(), Error>where
W: Write,
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Manager
impl !RefUnwindSafe for Manager
impl !Send for Manager
impl !Sync for Manager
impl Unpin for Manager
impl !UnwindSafe for Manager
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(())