use core::fmt::{
Display,
Formatter,
};
#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Success<Token, Stream> {
pub stream: Stream,
pub token: Token,
}
impl<Token, Stream> Success<Token, Stream> {
pub fn map_token<MappedToken, Map>(self, map: Map) -> Success<MappedToken, Stream>
where
Map: FnOnce(Token) -> MappedToken,
{
Success {
token: map(self.token),
stream: self.stream,
}
}
pub fn into_token(self) -> Token {
self.token
}
pub fn map_stream<MappedStream, Map>(self, map: Map) -> Success<Token, MappedStream>
where
Map: FnOnce(Stream) -> MappedStream,
{
Success {
token: self.token,
stream: map(self.stream),
}
}
pub fn into_stream(self) -> Stream {
self.stream
}
}
impl<Token, Stream> Display for Success<Token, Stream>
where
Token: Display,
Stream: Display,
{
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
write!(f, "Success: token: {} stream: {}", self.token, self.stream)
}
}