[pve-devel] [PATCH v3 27/30] common: add deserializer for FsType
Aaron Lauterer
a.lauterer at proxmox.com
Fri Mar 29 13:38:38 CET 2024
On 2024-03-29 13:20, Christoph Heiss wrote:
> On Thu, Mar 28, 2024 at 02:50:25PM +0100, Aaron Lauterer wrote:
>> Signed-off-by: Aaron Lauterer <a.lauterer at proxmox.com>
>> ---
> [..]
>> diff --git a/proxmox-installer-common/src/setup.rs b/proxmox-installer-common/src/setup.rs
>> index 8432a2c..743e7a9 100644
>> --- a/proxmox-installer-common/src/setup.rs
>> +++ b/proxmox-installer-common/src/setup.rs
> [..]
>> @@ -471,3 +472,39 @@ where
>>
>> serializer.collect_str(value)
>> }
>> +
>> +pub fn deserialize_fs_type<'de, D>(deserializer: D) -> Result<FsType, D::Error>
>> +where
>> + D: Deserializer<'de>,
>> +{
>> + let de_fs: String = Deserialize::deserialize(deserializer)?;
>> +
>> + let fs;
>> + let mut raid: Option<String> = None;
>> + let re_raid = Regex::new(r"^(?P<fs>.*) \((?P<raid>.*)\)$").map_err(de::Error::custom)?;
>> + match re_raid.captures(de_fs.as_str()) {
>> + Some(caps) => {
>> + fs = caps.name("fs").unwrap().as_str().to_lowercase();
>> + raid = Some(caps.name("raid").unwrap().as_str().to_lowercase());
>> + },
>> + None => fs = de_fs,
>> + }
>
> (nit I guess?) Instead of using a regex here (which also bloats the
> binary considerably), I'd IMO prefer a dumb `match` like in
> serialize_fstype() above.
>
> Would be much easier to read & reason about, at least. (and probably
> less code in total as well)
Yeah, sounds reasonable. :)
>
>> +
>> + match fs {
>> + t if t == "zfs" => {
>> + let raidlevel: ZfsRaidLevel = Deserialize::deserialize(serde_json::Value::String(raid.unwrap()))
>> + .map_err(de::Error::custom)?;
>> + Ok(FsType::Zfs(raidlevel))
>> + }
>> + t if t == "btrfs" => {
>> + let raidlevel: BtrfsRaidLevel = Deserialize::deserialize(serde_json::Value::String(raid.unwrap()))
>> + .map_err(de::Error::custom)?;
>> + Ok(FsType::Btrfs(raidlevel))
>> + }
>> + t => {
>> + let fstype: FsType = Deserialize::deserialize(serde_json::Value::String(t))
>> + .map_err(de::Error::custom)?;
>> + Ok(fstype)
>> + }
>> + }
>> +}
>> --
>> 2.39.2
>>
>>
>>
>> _______________________________________________
>> pve-devel mailing list
>> pve-devel at lists.proxmox.com
>> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>>
>>
More information about the pve-devel
mailing list