changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / rust/lib/obj/src/object/media.rs

changeset 698: 96958d3eb5b0
parent: 0ccbbd142694
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
1 //! obj::media
2 //!
3 //! Media object types
4 use crate::Objective;
5 
6 use serde::{Deserialize, Serialize};
7 use std::{fmt, str::FromStr};
8 /// External Media types.
9 #[derive(Serialize, Deserialize, Debug, Hash, PartialEq)]
10 pub struct Media {
11  pub name: String,
12  pub extension: MediaExtension,
13 }
14 
15 impl Media {
16  pub fn new(name: &str, ext: &str) -> Self {
17  Media {
18  name: name.to_string(),
19  extension: MediaExtension::from_str(ext).unwrap(),
20  }
21  }
22 }
23 
24 impl Objective for Media {}
25 
26 #[derive(Serialize, Deserialize, Debug, Hash, PartialEq)]
27 pub enum MediaExtension {
28  Mp3,
29  Wav,
30  Png,
31  Mp4,
32  None,
33 }
34 
35 impl fmt::Display for MediaExtension {
36  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
37  match self {
38  MediaExtension::Mp3 => write!(f, "mp3"),
39  MediaExtension::Wav => write!(f, "wav"),
40  MediaExtension::Png => write!(f, "png"),
41  MediaExtension::Mp4 => write!(f, "mp4"),
42  MediaExtension::None => write!(f, ""),
43  }
44  }
45 }
46 
47 impl FromStr for MediaExtension {
48  type Err = ();
49 
50  fn from_str(input: &str) -> Result<MediaExtension, Self::Err> {
51  match input {
52  "mp3" => Ok(MediaExtension::Mp3),
53  "wav" => Ok(MediaExtension::Wav),
54  "png" => Ok(MediaExtension::Png),
55  "mp4" => Ok(MediaExtension::Mp4),
56  "" => Ok(MediaExtension::None),
57  _ => Err(()),
58  }
59  }
60 }