Skip to main content

gatelogue_types/node/
sea.rs

1use strum_macros::EnumString;
2
3use crate::{_from_sql_for_enum, _get_column, _get_derived_vec, _get_set, node_type, util::ID};
4
5#[derive(Clone, Copy, PartialEq, Eq, Debug, EnumString)]
6pub enum SeaMode {
7    #[strum(serialize = "cruise")]
8    Cruise,
9    #[strum(serialize = "warp ferry")]
10    WarpFerry,
11    #[strum(serialize = "traincarts ferry")]
12    TrainCartsFerry,
13}
14_from_sql_for_enum!(SeaMode);
15
16node_type!(SeaCompany);
17impl SeaCompany {
18    _get_column!("SeaCompany", name, String);
19    _get_column!("SeaCompany", link, Option<String>);
20    _get_derived_vec!(lines, SeaLine, "../sql/sea/company_lines.sql");
21    _get_derived_vec!(stops, SeaStop, "../sql/sea/company_stops.sql");
22    _get_derived_vec!(docks, SeaDock, "../sql/sea/company_docks.sql");
23}
24
25node_type!(SeaLine);
26impl SeaLine {
27    _get_column!("SeaLine", code, String);
28    _get_column!("SeaLine", company, SeaCompany);
29    _get_column!("SeaLine", name, Option<String>);
30    _get_column!("SeaLine", colour, Option<String>);
31    _get_column!("SeaLine", mode, Option<SeaMode>);
32    _get_column!("SeaLine", local, Option<bool>);
33
34    _get_derived_vec!(docks, SeaDock, "../sql/sea/line_docks.sql");
35    _get_derived_vec!(stops, SeaStop, "../sql/sea/company_stops.sql");
36}
37
38node_type!(located SeaStop);
39impl SeaStop {
40    _get_set!("SeaStopCodes", codes, "code", String);
41    _get_column!("SeaStop", company, SeaCompany);
42    _get_column!("SeaStop", name, Option<String>);
43
44    _get_derived_vec!(docks, SeaDock, "../sql/sea/stop_docks.sql");
45    _get_derived_vec!(
46        connections_from_here,
47        SeaConnection,
48        "../sql/sea/stop_connections_from_here.sql"
49    );
50    _get_derived_vec!(
51        connections_to_here,
52        SeaConnection,
53        "../sql/sea/stop_connections_to_here.sql"
54    );
55    _get_derived_vec!(lines, SeaLine, "../sql/sea/stop_lines.sql");
56}
57
58node_type!(SeaDock);
59impl SeaDock {
60    _get_column!("SeaDock", code, Option<String>);
61    _get_column!("SeaDock", stop, SeaStop);
62
63    _get_derived_vec!(
64        connections_from_here,
65        SeaConnection,
66        "../sql/sea/dock_connections_from_here.sql"
67    );
68    _get_derived_vec!(
69        connections_to_here,
70        SeaConnection,
71        "../sql/sea/dock_connections_to_here.sql"
72    );
73    _get_derived_vec!(lines, SeaLine, "../sql/sea/dock_lines.sql");
74}
75
76node_type!(SeaConnection);
77impl SeaConnection {
78    _get_column!("SeaConnection", line, SeaLine);
79    _get_column!("SeaConnection", from, SeaDock);
80    _get_column!("SeaConnection", to, SeaDock);
81    _get_column!("SeaConnection", direction, Option<String>);
82    _get_column!("SeaConnection", duration, Option<u32>);
83}