mirror of
https://github.com/YGGverse/ggemini.git
synced 2026-03-31 17:15:31 +00:00
make mime type optional
This commit is contained in:
parent
5c0b8bf386
commit
8bfea4ffcf
2 changed files with 20 additions and 14 deletions
|
|
@ -23,7 +23,7 @@ pub const MAX_LEN: usize = 0x400; // 1024
|
||||||
|
|
||||||
pub struct Meta {
|
pub struct Meta {
|
||||||
data: Data,
|
data: Data,
|
||||||
mime: Mime,
|
mime: Option<Mime>,
|
||||||
status: Status,
|
status: Status,
|
||||||
// @TODO
|
// @TODO
|
||||||
// charset: Charset,
|
// charset: Charset,
|
||||||
|
|
@ -129,7 +129,7 @@ impl Meta {
|
||||||
&self.data
|
&self.data
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn mime(&self) -> &Mime {
|
pub fn mime(&self) -> &Option<Mime> {
|
||||||
&self.mime
|
&self.mime
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ pub enum Mime {
|
||||||
} // @TODO
|
} // @TODO
|
||||||
|
|
||||||
impl Mime {
|
impl Mime {
|
||||||
pub fn from_utf8(buffer: &[u8]) -> Result<Self, Error> {
|
pub fn from_utf8(buffer: &[u8]) -> Result<Option<Self>, Error> {
|
||||||
let len = buffer.len();
|
let len = buffer.len();
|
||||||
match buffer.get(..if len > MAX_LEN { MAX_LEN } else { len }) {
|
match buffer.get(..if len > MAX_LEN { MAX_LEN } else { len }) {
|
||||||
Some(value) => match GString::from_utf8(value.into()) {
|
Some(value) => match GString::from_utf8(value.into()) {
|
||||||
|
|
@ -53,47 +53,53 @@ impl Mime {
|
||||||
} // @TODO extension to lowercase
|
} // @TODO extension to lowercase
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_string(value: &str) -> Result<Self, Error> {
|
pub fn from_string(value: &str) -> Result<Option<Self>, Error> {
|
||||||
// Text
|
// Text
|
||||||
if value.contains("text/gemini") {
|
if value.contains("text/gemini") {
|
||||||
return Ok(Self::TextGemini);
|
return Ok(Some(Self::TextGemini));
|
||||||
}
|
}
|
||||||
|
|
||||||
if value.contains("text/plain") {
|
if value.contains("text/plain") {
|
||||||
return Ok(Self::TextPlain);
|
return Ok(Some(Self::TextPlain));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Image
|
// Image
|
||||||
if value.contains("image/gif") {
|
if value.contains("image/gif") {
|
||||||
return Ok(Self::ImageGif);
|
return Ok(Some(Self::ImageGif));
|
||||||
}
|
}
|
||||||
|
|
||||||
if value.contains("image/jpeg") {
|
if value.contains("image/jpeg") {
|
||||||
return Ok(Self::ImageJpeg);
|
return Ok(Some(Self::ImageJpeg));
|
||||||
}
|
}
|
||||||
|
|
||||||
if value.contains("image/webp") {
|
if value.contains("image/webp") {
|
||||||
return Ok(Self::ImageWebp);
|
return Ok(Some(Self::ImageWebp));
|
||||||
}
|
}
|
||||||
|
|
||||||
if value.contains("image/png") {
|
if value.contains("image/png") {
|
||||||
return Ok(Self::ImagePng);
|
return Ok(Some(Self::ImagePng));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Audio
|
// Audio
|
||||||
if value.contains("audio/flac") {
|
if value.contains("audio/flac") {
|
||||||
return Ok(Self::AudioFlac);
|
return Ok(Some(Self::AudioFlac));
|
||||||
}
|
}
|
||||||
|
|
||||||
if value.contains("audio/mpeg") {
|
if value.contains("audio/mpeg") {
|
||||||
return Ok(Self::AudioMpeg);
|
return Ok(Some(Self::AudioMpeg));
|
||||||
}
|
}
|
||||||
|
|
||||||
if value.contains("audio/ogg") {
|
if value.contains("audio/ogg") {
|
||||||
return Ok(Self::AudioOgg);
|
return Ok(Some(Self::AudioOgg));
|
||||||
}
|
}
|
||||||
|
|
||||||
Err(Error::Undefined)
|
// Some type exist, but not defined yet
|
||||||
|
if value.contains("/") {
|
||||||
|
return Err(Error::Undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Done
|
||||||
|
Ok(None) // may be empty (for some status codes)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_uri(uri: &Uri) -> Result<Self, Error> {
|
pub fn from_uri(uri: &Uri) -> Result<Self, Error> {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue