1use serde::Deserialize;
2use serde::Deserializer;
3use serde::Serialize;
4
5use crate::date::Date;
6
7#[derive(Clone, Debug, Deserialize, Serialize)]
9pub struct Rencontre {
10 #[serde(rename = "libelle", deserialize_with = "deserialize_numero_tour")]
11 pub tour: u8,
13 #[serde(rename = "equa")]
14 pub a: String,
16 #[serde(rename = "equb")]
17 pub b: String,
19 #[serde(default)]
20 pub scorea: String,
22 #[serde(default)]
23 pub scoreb: String,
25 #[serde(rename = "dateprevue")]
26 pub date: Date,
28}
29
30#[derive(Clone, Debug, Deserialize, Serialize)]
31pub 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}