deepwoken_reqparse/model/
reqfile.rs1use std::str::FromStr;
2
3use serde::{Deserialize, Deserializer, Serialize, de};
4
5use crate::{model::opt::OptionalGroup, req::Requirement};
6
7#[derive(Debug)]
9pub struct Reqfile {
10 pub general: Vec<Requirement>,
11 pub post: Vec<Requirement>,
12
13 pub optional: Vec<OptionalGroup>
14}
15
16impl Reqfile {
17 pub fn req_iter(&self) -> impl Iterator<Item = &Requirement> {
19 self.general.iter().chain(self.post.iter())
20 }
21}
22
23impl FromStr for Reqfile {
24 type Err = String;
25
26 fn from_str(s: &str) -> Result<Self, Self::Err> {
27 crate::parse::reqfile::parse_reqfile_str(s)
28 .map_err(|e| format!("Failed to parse requirement: {}", e))
29 }
30}
31
32impl<'de> Deserialize<'de> for Reqfile {
33 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
34 where
35 D: Deserializer<'de>,
36 {
37 let s = String::deserialize(deserializer)?;
38 s.parse().map_err(de::Error::custom)
39 }
40}