version_number/parsers/
modular.rs1use crate::parsers::{BaseVersionParser, FullVersionParser, VersionParser};
9use crate::{BaseVersion, FullVersion, ParserError, Version};
10
11pub use error::{ModularParserError, NumberError};
12pub use parser::{ParsedBase, ParsedFull, ParsedState, Parser, Unparsed};
13
14mod component;
15mod error;
16mod parser;
17mod take_while_peekable;
18
19#[derive(Debug)]
28pub struct ModularParser;
29
30impl VersionParser for ModularParser {
31 fn parse_version<B: AsRef<[u8]>>(&self, input: B) -> Result<Version, ParserError> {
32 let parser = Parser::from_slice(input.as_ref());
33
34 parser.parse().map_err(ParserError::from)
35 }
36}
37
38impl BaseVersionParser for ModularParser {
39 fn parse_base<B: AsRef<[u8]>>(&self, input: B) -> Result<BaseVersion, ParserError> {
40 let parser = Parser::from_slice(input.as_ref());
41
42 parser
43 .parse_base()
44 .and_then(|parser| parser.finish_base_version())
45 .map_err(ParserError::from)
46 }
47}
48
49impl FullVersionParser for ModularParser {
50 fn parse_full<B: AsRef<[u8]>>(&self, input: B) -> Result<FullVersion, ParserError> {
51 let parser = Parser::from_slice(input.as_ref());
52
53 parser
54 .parse_full()
55 .and_then(|parser| parser.finish_full_version())
56 .map_err(ParserError::from)
57 }
58}