WIP mime-type handling

CandyCorvid
Jul 13, 2023, 10:28 AM
ONQEIR5BV26QJSI3HY7B3MN6VWEGSZIXAIUIANJ5ZLR3QN3DFGEAC

Dependencies

  • [2] 3SPNKI46 Improve parsing. Add modules that were missed
  • [3] AMTMTTJT Upgrade status parsing
  • [4] DBKKKHC2 Initial commit

Change contents

  • replacement in src/response.rs at line 164
    [2.6295][2.6295:6326]()
    // TODO default is text/gemini
    [2.6295]
    [2.6326]
    pub use mime::Mime;
  • edit in src/response.rs at line 167
    [2.6358][2.6358:6444]()
    pub struct Mime {
    typ: String,
    sub: String,
    }
    #[derive(Debug, PartialEq, Eq)]
  • replacement in src/response.rs at line 168
    [2.6473][2.6473:6822]()
    impl TryFrom<Meta> for Mime {
    type Error = String;
    fn try_from(meta: Meta) -> Result<Self, Self::Error> {
    let (typ, sub) = meta
    .0
    .split_once('/')
    .ok_or(format!("invalid MIME type: {}", meta.0))?;
    Ok(Self {
    typ: typ.to_owned(),
    sub: sub.to_owned(),
    })
    [2.6473]
    [2.6822]
    impl From<Meta> for Mime {
    fn from(value: Meta) -> Self {
    value.0.parse().unwrap()
  • edit in src/main.rs at line 15
    [3.143][3.143:179]()
    //TODO: refactor and repurpose this
  • replacement in src/main.rs at line 62
    [2.7856][2.7856:7888]()
    println!("{body}");
    [2.7856]
    [2.7888]
    let media = decode_media(mime, body);
    media.display();
  • edit in src/main.rs at line 95
    [2.9015]
    [3.4501]
    }
    fn decode_media(mime: response::Mime, body: String) -> Media {
    let media = match mime.type_() {
    mime::TEXT => match mime.subtype().as_ref() {
    "gemini" => Media::Gemini(body.as_str().into()),
    _ => Media::Text(body),
    },
    _ => Media::Text(body),
    };
    media
  • edit in src/main.rs at line 108
    [3.4504]
    [3.448]
    enum Media {
    Gemini(Gemini),
    Text(String),
    }
    struct Gemini {}
    impl From<&str> for Gemini {
    fn from(value: &str) -> Self {
    todo!()
    }
    }
    impl Media {
    fn display(&self) {
    match self {
    Media::Gemini(_) => todo!(), // TODO
    Media::Text(s) => println!("{s}"),
    }
    todo!()
    }
    }
  • edit in Cargo.toml at line 12
    [3.42190]
    [2.10450]
    mime = "0.3.17"
  • edit in Cargo.lock at line 187
    [3.46866]
    [2.10705]
    "mime",
  • edit in Cargo.lock at line 293
    [3.49082]
    [2.11183]
    name = "mime"
    version = "0.3.17"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
    [[package]]