boring_parser/
boring_structs_300.rs

1use serde::{Deserialize, Serialize};
2
3// v2.10の構造体を流用
4use crate::boring_structs_210::*;
5use crate::types::FreeInfo;
6
7// ============================================================================
8// ルート構造体
9// ============================================================================
10
11#[derive(Debug, Serialize, Deserialize)]
12#[serde(rename = "ボーリング情報")]
13pub struct Boring300 {
14    #[serde(rename = "@DTD_version")]
15    pub dtd_version: Option<String>,
16    #[serde(rename = "標題情報")]
17    pub title: Title300,
18    #[serde(rename = "コア情報")]
19    pub core: Core300,
20}
21
22// ============================================================================
23// 標題情報 - v2.10と同じ構造だが、BasicSurvey300を使用
24// ============================================================================
25
26#[derive(Debug, Serialize, Deserialize)]
27pub struct Title300 {
28    #[serde(rename = "調査基本情報")]
29    pub basic_info: BasicSurvey300,
30    #[serde(rename = "経度緯度情報")]
31    pub longitude_latitude: LngLat210,
32    #[serde(default, rename = "ローカル座標")]
33    pub local_coordinates: Vec<LocalCoordinate210>,
34    #[serde(rename = "調査位置")]
35    pub survey_position: SurveyPosition210,
36    #[serde(rename = "発注機関")]
37    pub order_institution: OrderInstitution210,
38    #[serde(rename = "調査期間")]
39    pub survey_period: SurveyPeriod210,
40    #[serde(rename = "調査会社")]
41    pub survey_company: SurveyCompany210,
42    #[serde(rename = "ボーリング基本情報")]
43    pub boring_basic_info: BoringBasicInfo210,
44    #[serde(rename = "試錐機")]
45    pub drilling_machine: DrillingMachine210,
46    #[serde(rename = "エンジン")]
47    pub engine: Engine210,
48    #[serde(default, rename = "ハンマー落下用具")]
49    pub hammer_drop_tool: Option<HammerDropTool210>,
50    #[serde(default, rename = "N値記録用具")]
51    pub n_value_recorder: Option<NValueRecorder210>,
52    #[serde(rename = "ポンプ")]
53    pub pump: Pump210,
54    #[serde(default, rename = "櫓種類")]
55    pub tower_type: Option<TowerType210>,
56}
57
58// ============================================================================
59// 調査基本情報 - v3.00で適用規格が追加
60// ============================================================================
61
62#[derive(Debug, Serialize, Deserialize)]
63pub struct BasicSurvey300 {
64    #[serde(default, rename = "事業工事名")]
65    pub project_name: Option<String>,
66    #[serde(rename = "調査名")]
67    pub survey_name: Option<String>,
68    #[serde(rename = "調査目的")]
69    pub survey_purpose: Option<String>,
70    #[serde(rename = "調査対象")]
71    pub survey_target: Option<String>,
72    #[serde(rename = "ボーリング名")]
73    pub boring_name: Option<String>,
74    #[serde(rename = "ボーリング総数")]
75    pub total_boring: Option<String>,
76    #[serde(rename = "ボーリング連番")]
77    pub boring_serial: Option<String>,
78}
79
80// ============================================================================
81// コア情報 - 岩石土区分を使用、その他はv2.10を再利用
82// ============================================================================
83
84#[derive(Debug, Serialize, Deserialize)]
85pub struct Core300 {
86    #[serde(rename = "岩石土区分")] // v3.00で名称変更
87    pub rock_soil_classifications: Vec<RockSoilClassification300>,
88    #[serde(default, rename = "色調")]
89    pub colors: Vec<Color210>,
90    #[serde(default, rename = "観察記事")]
91    pub observational_articles: Vec<ObservationalArticle210>,
92    #[serde(default, rename = "観察記事枠線")]
93    pub observational_article_frames: Vec<ObservationalArticleFrame210>,
94    #[serde(default, rename = "標準貫入試験")]
95    pub standard_penetration_tests: Vec<StandardPenetrationTest210>,
96    #[serde(default, rename = "標準貫入試験詳細データ")]
97    pub standard_penetration_test_details: Vec<StandardPenetrationTestDetail210>,
98    #[serde(default, rename = "ルジオン試験")]
99    pub lugeon_tests: Vec<LugeonTest210>,
100    #[serde(default, rename = "ルジオン試験詳細データ")]
101    pub lugeon_test_details: Vec<LugeonTestDetail210>,
102    #[serde(default, rename = "相対密度稠度")]
103    pub relative_density_consistency: Vec<RelativeDensityConsistency210>,
104    #[serde(default, rename = "硬軟区分判定表")]
105    pub hardness_classification_table: Vec<HardnessClassificationTable210>,
106    #[serde(default, rename = "硬軟区分")]
107    pub hardness_classifications: Vec<HardnessClassification300>, // v3.00で内部フィールドがオプション化
108    #[serde(default, rename = "コア形状区分判定表")]
109    pub core_shape_classification_table: Vec<CoreShapeClassificationTable210>,
110    #[serde(default, rename = "コア形状区分")]
111    pub core_shape_classifications: Vec<CoreShapeClassification300>, // v3.00で内部フィールドがオプション化
112    #[serde(default, rename = "割れ目区分判定表")]
113    pub fracture_classification_table: Vec<FractureClassificationTable210>,
114    #[serde(default, rename = "割れ目区分")]
115    pub fracture_classifications: Vec<FractureClassification300>, // v3.00で内部フィールドがオプション化
116    #[serde(default, rename = "風化区分判定表")]
117    pub weathering_classification_table: Vec<WeatheringClassificationTable210>,
118    #[serde(default, rename = "風化区分")]
119    pub weathering_classifications: Vec<WeatheringClassification300>, // v3.00で内部フィールドがオプション化
120    #[serde(default, rename = "変質区分判定表")]
121    pub alteration_classification_table: Vec<AlterationClassificationTable210>,
122    #[serde(default, rename = "変質区分")]
123    pub alteration_classifications: Vec<AlterationClassification300>, // v3.00で内部フィールドがオプション化
124    #[serde(default, rename = "孔内水平載荷試験")]
125    pub borehole_horizontal_load_tests: Vec<BoreholeHorizontalLoadTest210>,
126    #[serde(default, rename = "透水試験")]
127    pub permeability_tests: Vec<PermeabilityTest210>,
128    #[serde(default, rename = "P波試験")]
129    pub p_wave_tests: Vec<PWaveTest210>,
130    #[serde(default, rename = "S波試験")]
131    pub s_wave_tests: Vec<SWaveTest210>,
132    #[serde(default, rename = "その他原位置試験")]
133    pub other_in_situ_tests: Vec<OtherInSituTest210>,
134    #[serde(default, rename = "試料採取")]
135    pub sample_collections: Vec<SampleCollection210>,
136    #[serde(default, rename = "地盤材料の工学的分類")]
137    pub ground_material_classifications: Vec<GroundMaterialClassification210>,
138    #[serde(default, rename = "地質時代")]
139    pub geological_ages: Vec<GeologicalAge300>, // v3.00で構造変更
140    #[serde(default, rename = "地層岩体区分")]
141    pub stratum_rock_classifications: Vec<StratumRockClassification210>,
142    #[serde(default, rename = "孔内水位")]
143    pub borehole_water_levels: Vec<BoreholeWaterLevel210>,
144    #[serde(default, rename = "掘削工程")]
145    pub drilling_processes: Vec<DrillingProcess210>,
146    #[serde(default, rename = "孔径孔壁保護")]
147    pub borehole_diameter_protections: Vec<BoreholeDiameterProtection210>,
148    #[serde(default, rename = "掘進速度")]
149    pub drilling_speeds: Vec<DrillingSpeed210>,
150    #[serde(default, rename = "コアチューブビット")]
151    pub core_tube_bits: Vec<CoreTubeBit210>,
152    #[serde(default, rename = "給圧条件")]
153    pub pressure_conditions: Vec<PressureCondition210>,
154    #[serde(default, rename = "回転数")]
155    pub rotation_speeds: Vec<RotationSpeed210>,
156    #[serde(default, rename = "送水条件")]
157    pub water_supply_conditions: Vec<WaterSupplyCondition210>,
158    #[serde(default, rename = "断層破砕帯区分")]
159    pub fault_fracture_zone_classifications: Vec<FaultFractureZoneClassification210>,
160    #[serde(default, rename = "コア採取率")]
161    pub core_recovery_rates: Vec<CoreRecoveryRate300>, // v3.00で内部フィールドがオプション化
162    #[serde(default, rename = "最大コア長")]
163    pub maximum_core_lengths: Vec<MaximumCoreLength300>, // v3.00で内部フィールドがオプション化
164    #[serde(default, rename = "RQD")]
165    pub rqds: Vec<RQD210>,
166    #[serde(default, rename = "岩級区分判定表")]
167    pub rock_class_classification_table: Vec<RockClassClassificationTable210>,
168    #[serde(default, rename = "岩級区分")]
169    pub rock_class_classifications: Vec<RockClassClassification300>, // v3.00で内部フィールドがオプション化
170    #[serde(default, rename = "保孔管")]
171    pub casing_pipes: Vec<CasingPipe210>,
172    #[serde(default, rename = "計測機器")]
173    pub measuring_instruments: Vec<MeasuringInstrument210>,
174    #[serde(default, rename = "地下水検層試験")]
175    pub groundwater_logging_tests: Vec<GroundwaterLoggingTest210>,
176    #[serde(default, rename = "地下水検層試験詳細データ")]
177    pub groundwater_logging_test_details: Vec<GroundwaterLoggingTestDetail210>,
178    #[serde(default, rename = "地下水検層試験判定結果")]
179    pub groundwater_logging_test_results: Vec<GroundwaterLoggingTestResult210>,
180    #[serde(default, rename = "備考")]
181    pub remarks: Vec<Remark210>,
182    #[serde(default, rename = "フリー情報")]
183    pub free_info: Vec<FreeInfo>,
184}
185
186// ============================================================================
187// 岩石土区分 - v3.00で大きく構造変更
188// DTD: <!ELEMENT 岩石土区分 (岩石土区分_下端深度, 岩石土区分_岩石土名,
189//      岩石土区分_岩石土記号?, 岩石土区分_岩石群+)>
190// ============================================================================
191
192#[derive(Debug, Serialize, Deserialize)]
193pub struct RockSoilClassification300 {
194    #[serde(rename = "岩石土区分_下端深度")]
195    pub depth: Option<String>,
196    #[serde(rename = "岩石土区分_岩石土名")]
197    pub rock_soil_name: Option<String>,
198    #[serde(default, rename = "岩石土区分_岩石土記号")]
199    pub rock_soil_symbol: Option<String>,
200    #[serde(rename = "岩石土区分_岩石群")] // + (1回以上)
201    pub rock_groups: Vec<RockGroup300>,
202}
203
204// ============================================================================
205// 岩石土区分_岩石群
206// DTD: <!ELEMENT 岩石土区分_岩石群 (岩石土区分_岩石群コード, 岩石土区分_岩石土コード+)>
207// ============================================================================
208
209#[derive(Debug, Serialize, Deserialize)]
210pub struct RockGroup300 {
211    #[serde(rename = "岩石土区分_岩石群コード")]
212    pub rock_group_code: Option<String>,
213    #[serde(rename = "岩石土区分_岩石土コード")] // + (1回以上)
214    pub rock_soil_codes: Vec<RockSoilCode300>,
215}
216
217// ============================================================================
218// 岩石土区分_岩石土コード
219// DTD: <!ELEMENT 岩石土区分_岩石土コード (岩石土区分_岩相?, 岩石土区分_岩石?,
220//      岩石土区分_変成岩岩相?, 岩石土区分_変成岩岩石?)>
221// ============================================================================
222
223#[derive(Debug, Serialize, Deserialize)]
224pub struct RockSoilCode300 {
225    #[serde(default, rename = "岩石土区分_岩相")]
226    pub lithofacies: Option<String>,
227    #[serde(default, rename = "岩石土区分_岩石")]
228    pub rock: Option<String>,
229    #[serde(default, rename = "岩石土区分_変成岩岩相")]
230    pub metamorphic_rock_lithofacies: Option<String>,
231    #[serde(default, rename = "岩石土区分_変成岩岩石")]
232    pub metamorphic_rock: Option<String>,
233}
234
235// ============================================================================
236// 地質時代 - v3.00で構造変更
237// DTD: <!ELEMENT 地質時代 (地質時代_上端深度, 地質時代_下端深度, 地質時代_地質時代名,
238//      地質時代_形成年代上限?, 地質時代_形成年代下限?, 地質時代_変成年代上限?, 地質時代_変成年代下限?)>
239// ============================================================================
240
241#[derive(Debug, Serialize, Deserialize)]
242pub struct GeologicalAge300 {
243    #[serde(rename = "地質時代_上端深度")]
244    pub start_depth: Option<String>,
245    #[serde(rename = "地質時代_下端深度")]
246    pub end_depth: Option<String>,
247    #[serde(rename = "地質時代_地質時代名")] // v2.10の「地質時代_時代名」から変更
248    pub geological_age_name: Option<String>,
249    #[serde(default, rename = "地質時代_形成年代上限")] // v3.00で追加
250    pub formation_age_upper_limit: Option<String>,
251    #[serde(default, rename = "地質時代_形成年代下限")] // v3.00で追加
252    pub formation_age_lower_limit: Option<String>,
253    #[serde(default, rename = "地質時代_変成年代上限")] // v3.00で追加
254    pub metamorphic_age_upper_limit: Option<String>,
255    #[serde(default, rename = "地質時代_変成年代下限")] // v3.00で追加
256    pub metamorphic_age_lower_limit: Option<String>,
257}
258
259// ============================================================================
260// 硬軟区分 - v3.00で「硬軟区分_硬軟区分」がオプション化
261// DTD: <!ELEMENT 硬軟区分 (硬軟区分_下端深度, 硬軟区分_硬軟区分?)>
262// ============================================================================
263
264#[derive(Debug, Serialize, Deserialize)]
265pub struct HardnessClassification300 {
266    #[serde(rename = "硬軟区分_下端深度")]
267    pub depth: Option<String>,
268    #[serde(default, rename = "硬軟区分_硬軟区分")] // v3.00でオプション化
269    pub classification: Option<String>,
270}
271
272// ============================================================================
273// コア形状区分 - v3.00で「コア形状区分_コア形状区分」がオプション化
274// DTD: <!ELEMENT コア形状区分 (コア形状区分_下端深度, コア形状区分_コア形状区分?)>
275// ============================================================================
276
277#[derive(Debug, Serialize, Deserialize)]
278pub struct CoreShapeClassification300 {
279    #[serde(rename = "コア形状区分_下端深度")]
280    pub depth: Option<String>,
281    #[serde(default, rename = "コア形状区分_コア形状区分")] // v3.00でオプション化
282    pub classification: Option<String>,
283}
284
285// ============================================================================
286// 割れ目区分 - v3.00で「割れ目区分_割れ目区分」がオプション化
287// DTD: <!ELEMENT 割れ目区分 (割れ目区分_下端深度, 割れ目区分_割れ目区分?)>
288// ============================================================================
289
290#[derive(Debug, Serialize, Deserialize)]
291pub struct FractureClassification300 {
292    #[serde(rename = "割れ目区分_下端深度")]
293    pub depth: Option<String>,
294    #[serde(default, rename = "割れ目区分_割れ目区分")] // v3.00でオプション化
295    pub classification: Option<String>,
296}
297
298// ============================================================================
299// 風化区分 - v3.00で「風化区分_風化区分」がオプション化
300// DTD: <!ELEMENT 風化区分 (風化区分_下端深度, 風化区分_風化区分?)>
301// ============================================================================
302
303#[derive(Debug, Serialize, Deserialize)]
304pub struct WeatheringClassification300 {
305    #[serde(rename = "風化区分_下端深度")]
306    pub depth: Option<String>,
307    #[serde(default, rename = "風化区分_風化区分")] // v3.00でオプション化
308    pub classification: Option<String>,
309}
310
311// ============================================================================
312// 変質区分 - v3.00で「変質区分_変質区分」がオプション化
313// DTD: <!ELEMENT 変質区分 (変質区分_下端深度, 変質区分_変質区分?)>
314// ============================================================================
315
316#[derive(Debug, Serialize, Deserialize)]
317pub struct AlterationClassification300 {
318    #[serde(rename = "変質区分_下端深度")]
319    pub depth: Option<String>,
320    #[serde(default, rename = "変質区分_変質区分")] // v3.00でオプション化
321    pub classification: Option<String>,
322}
323
324// ============================================================================
325// コア採取率 - v3.00で「コア採取率_採取率」がオプション化
326// DTD: <!ELEMENT コア採取率 (コア採取率_下端深度, コア採取率_採取率?)>
327// ============================================================================
328
329#[derive(Debug, Serialize, Deserialize)]
330pub struct CoreRecoveryRate300 {
331    #[serde(rename = "コア採取率_下端深度")]
332    pub depth: Option<String>,
333    #[serde(default, rename = "コア採取率_採取率")] // v3.00でオプション化
334    pub recovery_rate: Option<String>,
335}
336
337// ============================================================================
338// 最大コア長 - v3.00で「最大コア長_コア長」がオプション化
339// DTD: <!ELEMENT 最大コア長 (最大コア長_下端深度, 最大コア長_コア長?)>
340// ============================================================================
341
342#[derive(Debug, Serialize, Deserialize)]
343pub struct MaximumCoreLength300 {
344    #[serde(rename = "最大コア長_下端深度")]
345    pub depth: Option<String>,
346    #[serde(default, rename = "最大コア長_コア長")] // v3.00でオプション化
347    pub core_length: Option<String>,
348}
349
350// ============================================================================
351// 岩級区分 - v3.00で「岩級区分_岩級区分」がオプション化
352// DTD: <!ELEMENT 岩級区分 (岩級区分_下端深度, 岩級区分_岩級区分?)>
353// ============================================================================
354
355#[derive(Debug, Serialize, Deserialize)]
356pub struct RockClassClassification300 {
357    #[serde(rename = "岩級区分_下端深度")]
358    pub depth: Option<String>,
359    #[serde(default, rename = "岩級区分_岩級区分")] // v3.00でオプション化
360    pub classification: Option<String>,
361}