manganis_core/
options.rs

1use const_serialize::SerializeConst;
2
3use crate::{CssAssetOptions, FolderAssetOptions, ImageAssetOptions, JsAssetOptions};
4
5/// Settings for a generic asset
6#[derive(
7    Debug,
8    PartialEq,
9    PartialOrd,
10    Clone,
11    Copy,
12    Hash,
13    SerializeConst,
14    serde::Serialize,
15    serde::Deserialize,
16)]
17#[repr(C, u8)]
18#[non_exhaustive]
19pub enum AssetOptions {
20    /// An image asset
21    Image(ImageAssetOptions),
22    /// A folder asset
23    Folder(FolderAssetOptions),
24    /// A css asset
25    Css(CssAssetOptions),
26    /// A javascript asset
27    Js(JsAssetOptions),
28    /// An unknown asset
29    Unknown,
30}
31
32impl AssetOptions {
33    /// Try to get the extension for the asset. If the asset options don't define an extension, this will return None
34    pub const fn extension(&self) -> Option<&'static str> {
35        match self {
36            AssetOptions::Image(image) => image.extension(),
37            AssetOptions::Css(_) => Some("css"),
38            AssetOptions::Js(_) => Some("js"),
39            AssetOptions::Folder(_) => None,
40            AssetOptions::Unknown => None,
41        }
42    }
43
44    /// Convert the options into options for a generic asset
45    pub const fn into_asset_options(self) -> Self {
46        self
47    }
48}