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