atomic::regular
				
					
				
			This commit is contained in:
		
							parent
							
								
									d4460ad880
								
							
						
					
					
						commit
						060499a383
					
				| @ -1,4 +1,5 @@ | ||||
| mod modes; | ||||
| mod regular; | ||||
| 
 | ||||
| use std::error::Error; | ||||
| 
 | ||||
| @ -6,8 +7,8 @@ use crate::mode::*; | ||||
| 
 | ||||
| pub use self::modes::{ | ||||
|     AExtensionResultM, AExtensionSourceM, AModeResultM, AtomicModeParse, AtomicModeProxy, | ||||
|     CRegularAtomic, RegularAtomic, | ||||
| }; | ||||
| pub use self::regular::{CRegularAtomic, RegularAtomic}; | ||||
| 
 | ||||
| /// [`Atomic`] equivalent of [`ParseError`].
 | ||||
| ///
 | ||||
|  | ||||
| @ -52,41 +52,3 @@ where | ||||
|         <<A as WithParseMode>::WithMode as AtomicModeProxy>::pma_extend(atomic, tail) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /// For auto-deriving [`RegularAtomic`] from concrete implementations.
 | ||||
| pub trait CRegularAtomic: AtomicBase + ImplMode<Mode = RegularMode> { | ||||
|     /// Concrete implementation of [`RegularAtomic::ra_deserialize`].
 | ||||
|     fn cra_deserialize(stream: impl Stream) -> AParseResult<Self>; | ||||
|     /// Concrete implementation of [`RegularAtomic::ra_extend`].
 | ||||
|     fn cra_extend(self, tail: &[u8]) -> AParseResult<Self>; | ||||
| } | ||||
| 
 | ||||
| /// Mostly same as [`AtomicModeParse`] but requires [`Mode`] to be [`RegularMode`].
 | ||||
| pub trait RegularAtomic: AtomicBase + ParseMode<Mode = RegularMode> { | ||||
|     /// Same as [`AtomicModeParse::ma_deserialize`].
 | ||||
|     fn ra_deserialize(stream: impl Stream) -> AParseResult<Self>; | ||||
|     /// Same as [`AtomicModeParse::ma_extend`].
 | ||||
|     fn ra_extend(self, tail: &[u8]) -> AParseResult<Self>; | ||||
| } | ||||
| 
 | ||||
| impl<A: AtomicModeParse + ParseMode<Mode = RegularMode>> RegularAtomic for A { | ||||
|     fn ra_deserialize(stream: impl Stream) -> AParseResult<Self> { | ||||
|         A::ma_deserialize(stream) | ||||
|     } | ||||
| 
 | ||||
|     fn ra_extend(self, tail: &[u8]) -> AParseResult<Self> { | ||||
|         A::ma_extend(self, tail) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<A: CRegularAtomic> AtomicModeProxy for WithMode<A, RegularMode> { | ||||
|     type A = A; | ||||
| 
 | ||||
|     fn pma_deserialize<I: Stream>(stream: I) -> AModeResultM<Self::A, I> { | ||||
|         A::cra_deserialize(stream) | ||||
|     } | ||||
| 
 | ||||
|     fn pma_extend(atomic: AExtensionSourceM<Self::A>, tail: &[u8]) -> AExtensionResultM<Self::A> { | ||||
|         atomic.cra_extend(tail) | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										39
									
								
								src/atomic/regular.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/atomic/regular.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | ||||
| use super::*; | ||||
| 
 | ||||
| /// For auto-deriving [`RegularAtomic`] from concrete implementations.
 | ||||
| pub trait CRegularAtomic: AtomicBase + ImplMode<Mode = RegularMode> { | ||||
|     /// Concrete implementation of [`RegularAtomic::ra_deserialize`].
 | ||||
|     fn cra_deserialize(stream: impl Stream) -> AParseResult<Self>; | ||||
|     /// Concrete implementation of [`RegularAtomic::ra_extend`].
 | ||||
|     fn cra_extend(self, tail: &[u8]) -> AParseResult<Self>; | ||||
| } | ||||
| 
 | ||||
| /// Mostly same as [`AtomicModeParse`] but requires [`Mode`] to be [`RegularMode`].
 | ||||
| pub trait RegularAtomic: AtomicBase + ParseMode<Mode = RegularMode> { | ||||
|     /// Same as [`AtomicModeParse::ma_deserialize`].
 | ||||
|     fn ra_deserialize(stream: impl Stream) -> AParseResult<Self>; | ||||
|     /// Same as [`AtomicModeParse::ma_extend`].
 | ||||
|     fn ra_extend(self, tail: &[u8]) -> AParseResult<Self>; | ||||
| } | ||||
| 
 | ||||
| impl<A: AtomicModeParse + ParseMode<Mode = RegularMode>> RegularAtomic for A { | ||||
|     fn ra_deserialize(stream: impl Stream) -> AParseResult<Self> { | ||||
|         A::ma_deserialize(stream) | ||||
|     } | ||||
| 
 | ||||
|     fn ra_extend(self, tail: &[u8]) -> AParseResult<Self> { | ||||
|         A::ma_extend(self, tail) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<A: CRegularAtomic> AtomicModeProxy for WithMode<A, RegularMode> { | ||||
|     type A = A; | ||||
| 
 | ||||
|     fn pma_deserialize<I: Stream>(stream: I) -> AModeResultM<Self::A, I> { | ||||
|         A::cra_deserialize(stream) | ||||
|     } | ||||
| 
 | ||||
|     fn pma_extend(atomic: AExtensionSourceM<Self::A>, tail: &[u8]) -> AExtensionResultM<Self::A> { | ||||
|         atomic.cra_extend(tail) | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user