mime part of rfc5322

This commit is contained in:
Quentin 2023-07-19 19:30:07 +02:00
parent 4d86afaacf
commit b3bec8656d
Signed by: quentin
GPG key ID: E9602264D639FF68
2 changed files with 37 additions and 0 deletions

36
src/rfc5322/mime.rs Normal file
View file

@ -0,0 +1,36 @@
use nom::{
IResult,
sequence::tuple,
bytes::complete::{tag, take},
combinator::{map, opt, verify},
};
use crate::text::ascii;
use crate::text::whitespace::cfws;
#[derive(Debug, PartialEq)]
pub struct Version {
pub major: u8,
pub minor: u8,
}
pub fn version(input: &[u8]) -> IResult<&[u8], Version> {
let (rest, (_, major, _, _, _, minor, _)) = tuple((
opt(cfws),
map(verify(take(1usize), is_digit), ascii_to_u8),
opt(cfws),
tag(b"."),
opt(cfws),
map(verify(take(1usize), is_digit), ascii_to_u8),
opt(cfws),
))(input)?;
Ok((rest, Version { major, minor }))
}
fn is_digit(c: &[u8]) -> bool {
c[0] >= ascii::N0 && c[0] <= ascii::N9
}
fn ascii_to_u8(c: &[u8]) -> u8 {
c[0] - ascii::N0
}

View file

@ -3,3 +3,4 @@ pub mod address;
pub mod datetime; pub mod datetime;
pub mod trace; pub mod trace;
pub mod identification; pub mod identification;
pub mod mime;