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