libfftt/
tour.rs

1use serde::Deserialize;
2use serde::Deserializer;
3use serde::Serialize;
4
5use crate::date::Date;
6
7/// La rencontre d'une équipe contre une autre
8#[derive(Clone, Debug, Deserialize, Serialize)]
9pub struct Rencontre {
10    #[serde(rename = "libelle", deserialize_with = "deserialize_numero_tour")]
11    /// le tour de la rencontre
12    pub tour: u8,
13    #[serde(rename = "equa")]
14    /// l'équipe A (receveur)
15    pub a: String,
16    #[serde(rename = "equb")]
17    /// l'équipe B (extérieur)
18    pub b: String,
19    #[serde(default)]
20    /// le score de l'équipe A
21    pub scorea: String,
22    #[serde(default)]
23    /// le score de l'équipe B
24    pub scoreb: String,
25    #[serde(rename = "dateprevue")]
26    /// la date de la rencontre
27    pub date: Date,
28}
29
30#[derive(Clone, Debug, Deserialize, Serialize)]
31/// un ensemble de rencontres
32pub struct Rencontres {
33    #[serde(rename = "tour")]
34    pub rencontres: Vec<Rencontre>,
35}
36
37#[derive(Clone, Debug, Serialize)]
38pub struct Tour {
39    pub numero: u8,
40    pub date: Date,
41    pub rencontres: Rencontres,
42}
43
44fn deserialize_numero_tour<'de, D>(deserializer: D) -> Result<u8, D::Error>
45where
46    D: Deserializer<'de>,
47{
48    let s: &str = Deserialize::deserialize(deserializer)?;
49    let numero = s
50        .split('°')
51        .last()
52        .expect("Numéro de tour manquant")
53        .split(' ')
54        .next()
55        .unwrap()
56        .parse()
57        .unwrap();
58    Ok(numero)
59}