WIP mime-type handling
Dependencies
- [2]
3SPNKI46Improve parsing. Add modules that were missed - [3]
AMTMTTJTUpgrade status parsing - [4]
DBKKKHC2Initial commit
Change contents
- replacement in src/response.rs at line 164
// TODO default is text/geminipub use mime::Mime; - edit in src/response.rs at line 167
pub struct Mime {typ: String,sub: String,}#[derive(Debug, PartialEq, Eq)] - replacement in src/response.rs at line 168
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(),})impl From<Meta> for Mime {fn from(value: Meta) -> Self {value.0.parse().unwrap() - edit in src/main.rs at line 15
//TODO: refactor and repurpose this - replacement in src/main.rs at line 62
println!("{body}");let media = decode_media(mime, body);media.display(); - edit in src/main.rs at line 95
}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
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!(), // TODOMedia::Text(s) => println!("{s}"),}todo!()}} - edit in Cargo.toml at line 12
mime = "0.3.17" - edit in Cargo.lock at line 187
"mime", - edit in Cargo.lock at line 293
name = "mime"version = "0.3.17"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"[[package]]