1use crate::validation::Validate;
2use crate::{buffer, extensions, Extras, Index};
3use gltf_derive::Validate;
4use serde_derive::{Deserialize, Serialize};
5
6pub const VALID_MIME_TYPES: &[&str] = &[
8 "image/jpeg",
9 "image/png",
10 #[cfg(feature = "EXT_texture_webp")]
11 "image/webp",
12];
13
14#[derive(Clone, Debug, Deserialize, Serialize, Validate)]
16pub struct Image {
17 #[serde(rename = "bufferView")]
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub buffer_view: Option<Index<buffer::View>>,
22
23 #[serde(rename = "mimeType")]
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub mime_type: Option<MimeType>,
27
28 #[cfg(feature = "names")]
30 #[cfg_attr(feature = "names", serde(skip_serializing_if = "Option::is_none"))]
31 pub name: Option<String>,
32
33 #[serde(skip_serializing_if = "Option::is_none")]
37 pub uri: Option<String>,
38
39 #[serde(default, skip_serializing_if = "Option::is_none")]
41 pub extensions: Option<extensions::image::Image>,
42
43 #[serde(default)]
45 #[cfg_attr(feature = "extras", serde(skip_serializing_if = "Option::is_none"))]
46 #[cfg_attr(not(feature = "extras"), serde(skip_serializing))]
47 pub extras: Extras,
48}
49
50#[derive(Clone, Debug, Deserialize, Serialize)]
52pub struct MimeType(pub String);
53
54impl Validate for MimeType {}