Skip to main content

tripo_api/
compress.rs

1//! The `compress` field on text/image/multiview/texture task variants serializes
2//! as the literal string `"geometry"` when enabled and is omitted when disabled.
3//!
4//! Model as `Option<CompressionMode>` with `skip_serializing_if = "Option::is_none"`.
5
6use serde::{Deserialize, Serialize};
7
8/// Compression options. Currently the server only supports `Geometry`.
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
10#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
11#[serde(rename_all = "snake_case")]
12pub enum CompressionMode {
13    /// Serializes as the string `"geometry"`.
14    Geometry,
15}
16
17#[cfg(test)]
18mod tests {
19    use super::*;
20
21    #[derive(Serialize)]
22    struct Wrap {
23        #[serde(skip_serializing_if = "Option::is_none")]
24        compress: Option<CompressionMode>,
25    }
26
27    #[test]
28    fn none_is_omitted() {
29        let j = serde_json::to_string(&Wrap { compress: None }).unwrap();
30        assert_eq!(j, "{}");
31    }
32
33    #[test]
34    fn geometry_is_string_literal() {
35        let j = serde_json::to_string(&Wrap {
36            compress: Some(CompressionMode::Geometry),
37        })
38        .unwrap();
39        assert_eq!(j, "{\"compress\":\"geometry\"}");
40    }
41}