pibtool_stock_data/
data_source.rs1mod cities_app_data_source;
8mod city_linz_data_source;
9mod city_vienna_data_source;
10mod city_wels_data_source;
11mod district_vienna_data_source;
12mod frag_den_staat_data_source;
13mod gemdat_folders_data_source;
14mod gsz_accordion_cards_data_source;
15mod legal_framework_data_source;
16mod municipality_breitenfurt_data_source;
17mod official_website_data_source;
18mod session_net_data_source;
19mod unknown_page_format_data_source;
20mod wikipedia_page_data_source;
21
22pub use cities_app_data_source::CitiesAppDataSource;
23pub use city_linz_data_source::CityLinzDataSource;
24pub use city_vienna_data_source::CityViennaDataSource;
25pub use city_wels_data_source::CityWelsDataSource;
26pub use district_vienna_data_source::DistrictViennaDataSource;
27pub use frag_den_staat_data_source::FragDenStaatDataSource;
28pub use gemdat_folders_data_source::GemdatFoldersDataSource;
29pub use gsz_accordion_cards_data_source::GszAccordionCardsDataSource;
30pub use legal_framework_data_source::LegalFrameworkDataSource;
31pub use municipality_breitenfurt_data_source::MunicipalityBreitenfurtDataSource;
32pub use official_website_data_source::OfficialWebsiteDataSource;
33pub use session_net_data_source::{SessionNetDataSource, SessionNetDocumentsConfiguration};
34pub use unknown_page_format_data_source::UnknownPageFormatDataSource;
35pub use wikipedia_page_data_source::WikipediaPageDataSource;
36
37use serde::{Deserialize, Serialize};
38
39use super::DocumentKind;
40
41#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
43#[serde(tag = "kind", rename_all = "snake_case")]
44pub enum DataSource {
45 OfficialWebsite(OfficialWebsiteDataSource),
47
48 WikipediaPage(WikipediaPageDataSource),
50
51 LegalFramework(LegalFrameworkDataSource),
53
54 FragDenStaat(FragDenStaatDataSource),
56
57 GemdatFolders(GemdatFoldersDataSource),
59
60 GszAccordionCards(GszAccordionCardsDataSource),
62
63 CitiesApp(CitiesAppDataSource),
65
66 SessionNet(SessionNetDataSource),
68
69 CityVienna(CityViennaDataSource),
71
72 CityWels(CityWelsDataSource),
74
75 DistrictVienna(DistrictViennaDataSource),
77
78 MunicipalityBreitenfurt(MunicipalityBreitenfurtDataSource),
80
81 CityLinz(CityLinzDataSource),
83
84 UnknownPageFormat(UnknownPageFormatDataSource),
86}
87
88pub trait DataSourceInfo {
90 fn is_download_supported(&self) -> bool;
92
93 fn provides_documents(&self, document_kind: DocumentKind) -> bool;
95}
96
97impl DataSource {
98 fn inner(&self) -> &dyn DataSourceInfo {
99 match self {
100 DataSource::OfficialWebsite(ds) => ds,
101 DataSource::WikipediaPage(ds) => ds,
102 DataSource::LegalFramework(ds) => ds,
103 DataSource::FragDenStaat(ds) => ds,
104 DataSource::GemdatFolders(ds) => ds,
105 DataSource::GszAccordionCards(ds) => ds,
106 DataSource::CitiesApp(ds) => ds,
107 DataSource::SessionNet(ds) => ds,
108 DataSource::CityVienna(ds) => ds,
109 DataSource::CityWels(ds) => ds,
110 DataSource::DistrictVienna(ds) => ds,
111 DataSource::MunicipalityBreitenfurt(ds) => ds,
112 DataSource::CityLinz(ds) => ds,
113 DataSource::UnknownPageFormat(ds) => ds,
114 }
115 }
116}
117
118impl DataSourceInfo for DataSource {
119 fn is_download_supported(&self) -> bool {
120 self.inner().is_download_supported()
121 }
122
123 fn provides_documents(&self, document_kind: DocumentKind) -> bool {
124 self.inner().provides_documents(document_kind)
125 }
126}