bootstrap/core/config/toml/
change_id.rs1use serde::{Deserialize, Deserializer};
2use serde_derive::Deserialize;
3
4#[derive(Clone, Debug, PartialEq)]
6pub enum ChangeId {
7 Ignore,
8 Id(usize),
9}
10
11#[derive(Deserialize, Default)]
16pub(crate) struct ChangeIdWrapper {
17 #[serde(alias = "change-id", default, deserialize_with = "deserialize_change_id")]
18 pub(crate) inner: Option<ChangeId>,
19}
20
21fn deserialize_change_id<'de, D: Deserializer<'de>>(
22 deserializer: D,
23) -> Result<Option<ChangeId>, D::Error> {
24 let value = toml::Value::deserialize(deserializer)?;
25 Ok(match value {
26 toml::Value::String(s) if s == "ignore" => Some(ChangeId::Ignore),
27 toml::Value::Integer(i) => Some(ChangeId::Id(i as usize)),
28 _ => {
29 return Err(serde::de::Error::custom(
30 "expected \"ignore\" or an integer for change-id",
31 ));
32 }
33 })
34}