vergen_pretty/pretty/feature/
mod.rs1#[cfg(feature = "bincode")]
10use ::bincode::{Decode, Encode};
11#[cfg(feature = "serde")]
12use ::serde::{Deserialize, Serialize};
13#[cfg(any(feature = "bincode", feature = "serde"))]
14use {
15 crate::{Prefix, Pretty, Suffix},
16 bon::Builder,
17};
18
19#[cfg(feature = "bincode")]
20pub(crate) mod bincode;
21#[cfg(feature = "color")]
22pub(crate) mod color;
23#[cfg(feature = "serde")]
24pub(crate) mod serde;
25#[cfg(feature = "trace")]
26pub(crate) mod trace;
27
28#[cfg(any(feature = "bincode", feature = "serde"))]
29#[derive(Builder, Clone, Debug, PartialEq)]
31#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
32#[cfg_attr(feature = "bincode", derive(Decode, Encode))]
33pub struct PrettyExt {
34 vars: Vec<(String, String, String)>,
36 prefix: Option<Prefix>,
38 suffix: Option<Suffix>,
40}
41
42#[cfg(any(feature = "bincode", feature = "serde"))]
43impl PrettyExt {
44 pub fn vars(&self) -> &Vec<(String, String, String)> {
46 &self.vars
47 }
48
49 pub fn prefix(&self) -> Option<&Prefix> {
51 self.prefix.as_ref()
52 }
53
54 pub fn suffix(&self) -> Option<&Suffix> {
56 self.suffix.as_ref()
57 }
58}
59
60#[cfg(any(feature = "bincode", feature = "serde"))]
61impl From<Pretty> for PrettyExt {
62 fn from(pretty: Pretty) -> Self {
63 let mut pretty_c = pretty.clone();
64 pretty_c.populate_fmt();
65 PrettyExt::builder()
66 .vars(
67 pretty_c
68 .vars
69 .iter()
70 .map(|v| (v.0.clone(), v.1.clone(), v.2.clone()))
71 .collect(),
72 )
73 .maybe_prefix(pretty_c.prefix)
74 .maybe_suffix(pretty_c.suffix)
75 .build()
76 }
77}
78
79#[cfg(all(test, feature = "bincode"))]
80mod test_bincode {
81 use crate::{Pretty, PrettyExt, vergen_pretty_env};
82 use anyhow::Result;
83 use bincode::{config::standard, decode_from_slice, encode_to_vec};
84
85 #[test]
86 fn pretty_encode_decode_works() -> Result<()> {
87 let pretty = Pretty::builder().env(vergen_pretty_env!()).build();
88 let pretty_ext = PrettyExt::from(pretty);
89 let encoded = encode_to_vec(&pretty_ext, standard())?;
90 let decoded: PrettyExt = decode_from_slice(&encoded, standard())?.0;
91 assert_eq!(pretty_ext, decoded);
92 assert!(decoded.vars().len() > 0);
93 assert!(decoded.prefix().is_none());
94 assert!(decoded.suffix().is_none());
95 Ok(())
96 }
97}
98
99#[cfg(all(test, feature = "serde"))]
100mod test_serde {
101 use crate::{Pretty, PrettyExt, vergen_pretty_env};
102 use anyhow::Result;
103
104 #[test]
105 fn pretty_serde_works() -> Result<()> {
106 let pretty = Pretty::builder().env(vergen_pretty_env!()).build();
107 let pretty_ext = PrettyExt::from(pretty);
108 let val = serde_json::to_string(&pretty_ext)?;
109 assert!(val.contains(r#"{"vars":"#));
110 Ok(())
111 }
112}