Skip to main content

boring_parser/
boring_structs_110.rs

1use serde::{Deserialize, Serialize};
2use std::str;
3
4use crate::classification::{ClassificationInfo, Constituent, RockGroupCode, RockGroupInfo};
5use crate::types::FreeInfo;
6
7#[derive(Debug, Serialize, Deserialize)]
8#[serde(rename = "ボーリング情報")]
9pub struct Boring110 {
10    #[serde(rename = "@DTD_version")]
11    pub dtd_version: Option<String>,
12    #[serde(rename = "標題情報")]
13    pub title: Title,
14    #[serde(rename = "コア情報")]
15    pub core: Core,
16}
17
18#[derive(Debug, Serialize, Deserialize)]
19pub struct Title {
20    #[serde(rename = "調査基本情報")]
21    pub basic_info: BasicSurvey,
22    #[serde(rename = "経度緯度情報")]
23    pub longitude_latitude: LngLat,
24    #[serde(default, rename = "ローカル座標")] // オプション
25    pub local_coordinate_definition: Option<LocalCoordinateDefinition>,
26    #[serde(rename = "調査位置")]
27    pub survey_position: SurveyPosition,
28    #[serde(rename = "発注機関")]
29    pub order_institution: OrderInstitution,
30    #[serde(rename = "調査期間")]
31    pub survey_period: SurveyPeriod,
32    #[serde(rename = "調査会社")]
33    pub survey_company: SurveyCompany,
34    #[serde(rename = "ボーリング基本情報")]
35    pub boring_basic_info: BoringBasicInfo,
36    #[serde(rename = "試錐機")]
37    pub drilling_machine: DrillingMachine,
38    #[serde(rename = "ハンマ落下用具")]
39    pub hammer_drop_tool: HammerDropTool,
40    #[serde(rename = "N値記録用具")]
41    pub n_value_recorder: NValueRecorder,
42    #[serde(rename = "エンジン")]
43    pub engine: Engine,
44    #[serde(rename = "ポンプ")]
45    pub pump: Pump,
46    #[serde(default, rename = "港湾局指定コード")] // オプション
47    pub port_authority_code: Option<PortAuthorityCode>,
48}
49
50#[derive(Debug, Serialize, Deserialize)]
51pub struct BasicSurvey {
52    #[serde(rename = "事業工事名")] // 必須
53    pub project_name: Option<String>,
54    #[serde(rename = "調査名")] // 必須
55    pub survey_name: Option<String>,
56    #[serde(rename = "調査目的")] // 必須
57    pub survey_purpose: Option<String>,
58    #[serde(rename = "調査対象")] // 必須
59    pub survey_target: Option<String>,
60    #[serde(rename = "ボーリング名")] // 必須
61    pub boring_name: Option<String>,
62    #[serde(rename = "ボーリング連番")] // 必須
63    pub boring_serial: Option<String>,
64    #[serde(rename = "ボーリング総数")] // 必須
65    pub total_boring: Option<String>,
66}
67
68#[derive(Debug, Serialize, Deserialize)]
69pub struct LngLat {
70    #[serde(rename = "経度_度")] // 必須
71    pub longitude_degree: Option<String>,
72    #[serde(rename = "経度_分")] // 必須
73    pub longitude_minute: Option<String>,
74    #[serde(rename = "経度_秒")] // 必須
75    pub longitude_second: Option<String>,
76    #[serde(rename = "緯度_度")] // 必須
77    pub latitude_degree: Option<String>,
78    #[serde(rename = "緯度_分")] // 必須
79    pub latitude_minute: Option<String>,
80    #[serde(rename = "緯度_秒")] // 必須
81    pub latitude_second: Option<String>,
82    #[serde(rename = "取得方法コード")] // 必須
83    pub acquisition_method_code: Option<String>,
84    #[serde(rename = "読取精度コード")] // 必須
85    pub reading_precision_code: Option<String>,
86    #[serde(rename = "測地系")] // 必須
87    pub geodetic_system: Option<String>,
88}
89
90#[derive(Debug, Serialize, Deserialize, PartialEq)]
91pub struct LocalCoordinateDefinition {
92    #[serde(rename = "X座標定義")] // 必須
93    pub x_definition: Option<String>,
94    #[serde(rename = "X座標")] // 必須
95    pub x: Option<String>,
96    #[serde(rename = "Y座標定義")] // 必須
97    pub y_definition: Option<String>,
98    #[serde(rename = "Y座標")] // 必須
99    pub y: Option<String>,
100    #[serde(rename = "Z座標定義")] // 必須
101    pub z_definition: Option<String>,
102    #[serde(rename = "Z座標")] // 必須
103    pub z: Option<String>,
104}
105
106#[derive(Debug, Serialize, Deserialize)]
107pub struct SurveyPosition {
108    #[serde(rename = "調査位置住所")] // 必須
109    pub address: Option<String>,
110    #[serde(rename = "コード1次")] // 必須
111    pub code1: Option<String>,
112    #[serde(rename = "コード2次")] // 必須
113    pub code2: Option<String>,
114    #[serde(rename = "コード3次")] // 必須
115    pub code3: Option<String>,
116}
117
118#[derive(Debug, Serialize, Deserialize)]
119pub struct OrderInstitution {
120    #[serde(rename = "発注機関名称")] // 必須
121    pub name: Option<String>,
122    #[serde(rename = "テクリスコード")] // 必須
123    pub code: Option<String>,
124}
125
126#[derive(Debug, Serialize, Deserialize)]
127pub struct SurveyPeriod {
128    #[serde(rename = "調査期間_開始年")] // 必須
129    pub start_year: Option<String>,
130    #[serde(rename = "調査期間_開始月")] // 必須
131    pub start_month: Option<String>,
132    #[serde(rename = "調査期間_開始日")] // 必須
133    pub start_day: Option<String>,
134    #[serde(rename = "調査期間_終了年")] // 必須
135    pub end_year: Option<String>,
136    #[serde(rename = "調査期間_終了月")] // 必須
137    pub end_month: Option<String>,
138    #[serde(rename = "調査期間_終了日")] // 必須
139    pub end_day: Option<String>,
140}
141
142#[derive(Debug, Serialize, Deserialize)]
143pub struct SurveyCompany {
144    #[serde(rename = "調査会社_名称")] // 必須
145    pub name: Option<String>,
146    #[serde(rename = "調査会社_TEL")] // 必須
147    pub tel: Option<String>,
148    #[serde(rename = "調査会社_主任技師")] // 必須
149    pub chief_engineer: Option<String>,
150    #[serde(rename = "調査会社_現場代理人")] // 必須
151    pub field_agent: Option<String>,
152    #[serde(rename = "調査会社_コア鑑定者")] // 必須
153    pub core_appraiser: Option<String>,
154    #[serde(rename = "調査会社_ボーリング責任者")] // 必須
155    pub boring_manager: Option<String>,
156}
157
158#[derive(Debug, Serialize, Deserialize)]
159pub struct BoringBasicInfo {
160    #[serde(rename = "孔口標高")] // 必須
161    pub surface_elevation: Option<String>,
162    #[serde(rename = "総掘進長")] // 必須
163    pub total_drilling_length: Option<String>,
164    #[serde(rename = "地質柱状図様式")] // 必須
165    pub columnar_section_style: Option<String>,
166    #[serde(default, rename = "掘進角度")] // オプション
167    pub angle: Option<String>,
168    #[serde(default, rename = "掘進方位")] // オプション
169    pub azimuth: Option<String>,
170    #[serde(rename = "地盤勾配")] // 必須
171    pub ground_slope: Option<String>,
172}
173
174#[derive(Debug, Serialize, Deserialize)]
175pub struct DrillingMachine {
176    #[serde(rename = "試錐機_名称")]
177    pub name: Option<String>,
178    #[serde(rename = "試錐機_能力")]
179    pub capacity: Option<String>,
180    #[serde(rename = "試錐機_方法")]
181    pub method: Option<String>,
182}
183
184#[derive(Debug, Serialize, Deserialize)]
185pub struct HammerDropTool {
186    #[serde(rename = "ハンマ落下用具_コード")]
187    pub code: Option<String>,
188    #[serde(rename = "ハンマ落下用具_名称")]
189    pub name: Option<String>,
190}
191
192#[derive(Debug, Serialize, Deserialize)]
193pub struct NValueRecorder {
194    #[serde(rename = "N値記録用具_コード")]
195    pub code: Option<String>,
196    #[serde(rename = "N値記録用具_名称")]
197    pub name: Option<String>,
198}
199
200#[derive(Debug, Serialize, Deserialize)]
201pub struct Engine {
202    #[serde(rename = "エンジン_名称")]
203    pub name: Option<String>,
204    #[serde(rename = "エンジン_能力")]
205    pub capacity: Option<String>,
206    #[serde(rename = "エンジン_単位")]
207    pub unit: Option<String>,
208}
209
210#[derive(Debug, Serialize, Deserialize)]
211pub struct Pump {
212    #[serde(rename = "ポンプ_名称")]
213    pub name: Option<String>,
214    #[serde(rename = "ポンプ_能力")]
215    pub capacity: Option<String>,
216    #[serde(rename = "ポンプ_単位")]
217    pub unit: Option<String>,
218}
219
220#[derive(Debug, Serialize, Deserialize)]
221pub struct PortAuthorityCode {
222    #[serde(rename = "櫓種類コード")]
223    pub tower_type_code: Option<String>,
224    #[serde(rename = "建設局")]
225    pub construction_bureau: Option<String>,
226    #[serde(rename = "都道府県")]
227    pub prefecture: Option<String>,
228    #[serde(rename = "港名")]
229    pub port_name: Option<String>,
230    #[serde(rename = "調査者")]
231    pub investigator: Option<String>,
232}
233
234#[derive(Debug, Serialize, Deserialize)]
235pub struct Core {
236    #[serde(rename = "地質区分")]
237    pub geological_classifications: Vec<GeologicalClassification>,
238    #[serde(default, rename = "色調")]
239    pub colors: Vec<Color>,
240    #[serde(default, rename = "観察記事")]
241    pub observational_articles: Vec<ObservationalArticle>,
242    #[serde(default, rename = "観察記事枠線")]
243    pub observational_article_frames: Vec<ObservationalArticleFrame>,
244    #[serde(default, rename = "標準貫入試験")]
245    pub standard_penetration_tests: Vec<StandardPenetrationTest>,
246    #[serde(default, rename = "相対密度稠度")]
247    pub relative_density: Vec<RelativeDensity>,
248    #[serde(default, rename = "孔内水平載荷試験")]
249    pub borehole_horizontal_load_test: Vec<BoreholeHorizontalLoadTest>,
250    #[serde(default, rename = "透水試験")]
251    pub borehole_drilled_well_test: Vec<BoreholeDrilledWellTest>,
252    #[serde(default, rename = "P波試験")]
253    pub p_wave_test: Vec<PWaveTest>,
254    #[serde(default, rename = "S波試験")]
255    pub s_wave_test: Vec<SWaveTest>,
256    #[serde(default, rename = "その他原位置試験")]
257    pub other_original_position_tests: Vec<OtherOriginalPositionTests>,
258    #[serde(default, rename = "採取試料")]
259    pub core_samples: Vec<CoreSample>,
260    #[serde(default, rename = "土質試験結果")]
261    pub soil_test_result: Vec<SoilTestResult>,
262    #[serde(default, rename = "地盤分類")]
263    pub ground_classifications: Vec<GeotechnicalClassification>,
264    #[serde(default, rename = "地質時代")]
265    pub geological_eras: Vec<GeologicalEra>,
266    #[serde(default, rename = "地層区分")]
267    pub geostratum_classifications: Vec<GeostratumClassification>,
268    #[serde(default, rename = "孔内水位")]
269    pub borehole_water_levels: Vec<BoreholeWaterLevel>,
270    #[serde(default, rename = "掘削工程")]
271    pub drilling_process: Vec<DrillingProcess>,
272    #[serde(default, rename = "孔径孔壁保護")]
273    pub borehole_wall_protection: Vec<BoreholeWallProtection>,
274    #[serde(default, rename = "断層区分")]
275    pub fault_classification: Vec<FaultClassification>,
276    #[serde(default, rename = "フリー情報")]
277    pub free_info: Vec<FreeInfo>,
278}
279
280#[derive(Debug, Serialize, Deserialize)]
281pub struct GeologicalClassification {
282    #[serde(rename = "地質区分_深度")]
283    pub depth: Option<String>,
284    #[serde(rename = "地質区分_地質名称1")]
285    pub classification1: Option<String>,
286    #[serde(rename = "地質区分_地質コード1")]
287    pub code1: Option<String>,
288    #[serde(rename = "地質区分_地質名称2")]
289    pub classification2: Option<String>,
290    #[serde(rename = "地質区分_地質コード2")]
291    pub code2: Option<String>,
292}
293
294#[derive(Debug, Serialize, Deserialize)]
295pub struct Color {
296    #[serde(rename = "色調_下端深度")]
297    pub depth: Option<String>,
298    #[serde(rename = "色調_状態")]
299    pub state: Option<String>,
300    #[serde(rename = "色調_コード")]
301    pub code: Option<String>,
302}
303
304#[derive(Debug, Serialize, Deserialize)]
305pub struct ObservationalArticle {
306    #[serde(rename = "観察記事_上端深度")]
307    pub start_depth: Option<String>,
308    #[serde(rename = "観察記事_下端深度")]
309    pub end_depth: Option<String>,
310    #[serde(rename = "観察記事_記事")]
311    pub observation: Option<String>,
312}
313
314#[derive(Debug, Serialize, Deserialize)]
315pub struct ObservationalArticleFrame {
316    #[serde(rename = "観察記事枠線_下端深度")]
317    pub end_depth: Option<String>,
318}
319
320#[derive(Debug, Clone, Serialize, Deserialize)]
321pub struct StandardPenetrationTest {
322    #[serde(default, rename = "標準貫入試験_開始深度")]
323    pub start_depth: Option<String>,
324    #[serde(default, rename = "標準貫入試験_0_10打撃回数")]
325    pub hits_0_10: Option<String>,
326    #[serde(default, rename = "標準貫入試験_0_10貫入量")]
327    pub penetration_0_10: Option<String>,
328    #[serde(default, rename = "標準貫入試験_10_20打撃回数")]
329    pub hits_10_20: Option<String>,
330    #[serde(default, rename = "標準貫入試験_10_20貫入量")]
331    pub penetration_10_20: Option<String>,
332    #[serde(default, rename = "標準貫入試験_20_30打撃回数")]
333    pub hits_20_30: Option<String>,
334    #[serde(default, rename = "標準貫入試験_20_30貫入量")]
335    pub penetration_20_30: Option<String>,
336    #[serde(default, rename = "標準貫入試験_合計打撃回数")]
337    pub total_hit_count: Option<String>,
338    #[serde(default, rename = "標準貫入試験_合計貫入量")]
339    pub total_penetration: Option<String>,
340    #[serde(default, rename = "標準貫入試験_備考")]
341    pub remarks: Option<String>,
342}
343
344#[derive(Debug, Serialize, Deserialize)]
345pub struct RelativeDensity {
346    #[serde(rename = "相対密度稠度_下端深度")]
347    pub depth: Option<String>,
348    #[serde(default, rename = "相対密度_コード")]
349    pub code: Option<String>,
350    #[serde(default, rename = "相対密度_状態")]
351    pub state: Option<String>,
352    #[serde(default, rename = "相対稠度_コード")]
353    pub relative_compaction_code: Option<String>,
354    #[serde(default, rename = "相対稠度_状態")]
355    pub relative_compaction_state: Option<String>,
356}
357
358#[derive(Debug, Serialize, Deserialize)]
359pub struct BoreholeHorizontalLoadTest {
360    #[serde(rename = "孔内水平載荷試験_試験深度")] // 必須
361    pub depth: Option<String>,
362    #[serde(rename = "孔内水平載荷試験_試験方法コード")] // 必須
363    pub method_code: Option<String>,
364    #[serde(default, rename = "孔内水平載荷試験_試験方法")] // オプション
365    pub method: Option<String>,
366    #[serde(rename = "孔内水平載荷試験_初期圧")] // 必須
367    pub initial_pressure: Option<String>,
368    #[serde(rename = "孔内水平載荷試験_降伏圧")] // 必須
369    pub yield_pressure: Option<String>,
370    #[serde(rename = "孔内水平載荷試験_変形係数")] // 必須
371    pub deformation_coefficient: Option<String>,
372}
373
374#[derive(Debug, Serialize, Deserialize)]
375pub struct BoreholeDrilledWellTest {
376    #[serde(rename = "透水試験_上端深度")] // 必須
377    pub start_depth: Option<String>,
378    #[serde(rename = "透水試験_下端深度")] // 必須
379    pub end_depth: Option<String>,
380    #[serde(rename = "透水試験_試験コード")] // 必須
381    pub test_code: Option<String>,
382    #[serde(default, rename = "透水試験_試験方法")] // オプション
383    pub test_method: Option<String>,
384    #[serde(rename = "透水試験_透水係数")] // 必須
385    pub permeability: Option<String>,
386}
387
388#[derive(Debug, Serialize, Deserialize)]
389pub struct PWaveTest {
390    #[serde(rename = "P波試験_上端深度")]
391    pub start_depth: Option<String>,
392    #[serde(rename = "P波試験_下端深度")]
393    pub end_depth: Option<String>,
394    #[serde(rename = "P波試験_速度")]
395    pub velocity: Option<String>,
396}
397
398#[derive(Debug, Serialize, Deserialize)]
399pub struct SWaveTest {
400    #[serde(rename = "S波試験_上端深度")]
401    pub start_depth: Option<String>,
402    #[serde(rename = "S波試験_下端深度")]
403    pub end_depth: Option<String>,
404    #[serde(rename = "S波試験_速度")]
405    pub velocity: Option<String>,
406}
407
408#[derive(Debug, Serialize, Deserialize)]
409pub struct OtherOriginalPositionTests {
410    #[serde(default, rename = "その他原位置試験_試験方法")]
411    pub test_method: Option<String>,
412    #[serde(default, rename = "その他原位置試験_上端深度")]
413    pub start_depth: Option<String>,
414    #[serde(default, rename = "その他原位置試験_下端深度")]
415    pub end_depth: Option<String>,
416    #[serde(default, rename = "その他原位置試験_試験結果")]
417    pub test_result: Option<String>,
418}
419
420#[derive(Debug, Serialize, Deserialize, PartialEq)]
421pub struct CoreSample {
422    #[serde(default, rename = "採取試料_上端深度")]
423    pub start_depth: Option<String>,
424    #[serde(default, rename = "採取試料_下端深度")]
425    pub end_depth: Option<String>,
426    #[serde(default, rename = "採取試料_試料番号")]
427    pub sample_number: Option<String>,
428    #[serde(default, rename = "採取試料_採取方法コード")]
429    pub collection_method_code: Option<String>,
430    #[serde(default, rename = "採取試料_採取方法")]
431    pub method: Option<String>,
432}
433
434#[derive(Debug, Serialize, Deserialize)]
435pub struct SoilTestResult {
436    #[serde(rename = "土質試験結果_試料番号")] // 必須
437    pub sample_number: Option<String>,
438    #[serde(rename = "土質試験結果_上端深度")] // 必須
439    pub start_depth: Option<String>,
440    #[serde(rename = "土質試験結果_下端深度")] // 必須
441    pub end_depth: Option<String>,
442    #[serde(default, rename = "土質試験結果_湿潤密度")] // オプション
443    pub wet_density: Option<String>,
444    #[serde(default, rename = "土質試験結果_乾燥密度")] // オプション
445    pub dry_density: Option<String>,
446    #[serde(default, rename = "土質試験結果_土粒子密度")] // オプション
447    pub soil_particle_density: Option<String>,
448    #[serde(default, rename = "土質試験結果_自然含水比")] // オプション
449    pub natural_water_content: Option<String>,
450    #[serde(default, rename = "土質試験結果_間隙比")] // オプション
451    pub void_ratio: Option<String>,
452    #[serde(default, rename = "土質試験結果_飽和度")] // オプション
453    pub saturation: Option<String>,
454    #[serde(default, rename = "土質試験結果_粒度_石")] // オプション
455    pub stone: Option<String>,
456    #[serde(default, rename = "土質試験結果_粒度_礫")] // オプション
457    pub gravel: Option<String>,
458    #[serde(default, rename = "土質試験結果_粒度_砂")] // オプション
459    pub sand: Option<String>,
460    #[serde(default, rename = "土質試験結果_粒度_シルト")] // オプション
461    pub silt: Option<String>,
462    #[serde(default, rename = "土質試験結果_粒度_粘土")] // オプション
463    pub clay: Option<String>,
464    #[serde(default, rename = "土質試験結果_粒度_最大粒径")] // オプション
465    pub max_grain_size: Option<String>,
466    #[serde(default, rename = "土質試験結果_粒度_均等係数")] // オプション
467    pub equal_coefficient: Option<String>,
468    #[serde(default, rename = "土質試験結果_液性限界")] // オプション
469    pub liquidity_limit: Option<String>,
470    #[serde(default, rename = "土質試験結果_塑性限界")] // オプション
471    pub plasticity_limit: Option<String>,
472    #[serde(default, rename = "土質試験結果_塑性指数")] // オプション
473    pub plasticity_index: Option<String>,
474    #[serde(default, rename = "土質試験結果_地盤材料名")] // オプション
475    pub soil_name: Option<String>,
476    #[serde(default, rename = "土質試験結果_地盤材料記号")] // オプション
477    pub soil_symbol: Option<String>,
478    #[serde(default, rename = "土質試験結果_圧密試験方法")] // オプション
479    pub compression_test_method: Option<String>,
480    #[serde(default, rename = "土質試験結果_圧縮指数")] // オプション
481    pub compression_index: Option<String>,
482    #[serde(default, rename = "土質試験結果_圧密降伏応力")] // オプション
483    pub compression_yield_stress: Option<String>,
484    #[serde(default, rename = "土質試験結果_体積圧縮係数")] // オプション
485    pub volume_compression_coefficient: Option<String>,
486    #[serde(default, rename = "土質試験結果_圧密係数")] // オプション
487    pub compression_coefficient: Option<String>,
488    #[serde(default, rename = "土質試験結果_応力範囲")] // オプション
489    pub stress_range: Option<String>,
490    #[serde(default, rename = "土質試験結果_一軸圧縮強さ1")] // オプション
491    pub compression_strength_1: Option<String>,
492    #[serde(default, rename = "土質試験結果_一軸圧縮強さ2")] // オプション
493    pub compression_strength_2: Option<String>,
494    #[serde(default, rename = "土質試験結果_一軸圧縮強さ3")] // オプション
495    pub compression_strength_3: Option<String>,
496    #[serde(default, rename = "土質試験結果_一軸圧縮強さ4")] // オプション
497    pub compression_strength_4: Option<String>,
498    #[serde(default, rename = "土質試験結果_一軸試験破壊ひずみ1")] // オプション
499    pub compression_failure_1: Option<String>,
500    #[serde(default, rename = "土質試験結果_一軸試験破壊ひずみ2")] // オプション
501    pub compression_failure_2: Option<String>,
502    #[serde(default, rename = "土質試験結果_一軸試験破壊ひずみ3")] // オプション
503    pub compression_failure_3: Option<String>,
504    #[serde(default, rename = "土質試験結果_一軸試験破壊ひずみ4")] // オプション
505    pub compression_failure_4: Option<String>,
506    #[serde(default, rename = "土質試験結果_一軸試験鋭敏比")] // オプション
507    pub compression_sharpness_ratio: Option<String>,
508    #[serde(default, rename = "土質試験結果_せん断試験条件")] // オプション
509    pub tensile_test_condition: Option<String>,
510    #[serde(default, rename = "土質試験結果_せん断強さ_全応力")] // オプション
511    pub tensile_strength_total: Option<String>,
512    #[serde(default, rename = "土質試験結果_せん断抵抗角_全応力")] // オプション
513    pub tensile_resistance_angle_total: Option<String>,
514    #[serde(default, rename = "土質試験結果_せん断強さ_有効応力")] // オプション
515    pub tensile_strength_effective: Option<String>,
516    #[serde(default, rename = "土質試験結果_せん断抵抗角_有効応力")] // オプション
517    pub tensile_resistance_angle_effective: Option<String>,
518    #[serde(default, rename = "土質試験結果_試料状態")] // オプション
519    pub sample_condition: Option<String>,
520}
521
522#[derive(Debug, Serialize, Deserialize)]
523pub struct GeotechnicalClassification {
524    #[serde(rename = "地盤分類_下端深度")]
525    pub end_depth: Option<String>,
526    #[serde(rename = "地盤分類_工学的分類記号")]
527    pub classification_symbol: Option<String>,
528}
529
530#[derive(Debug, Serialize, Deserialize, PartialEq)]
531pub struct GeologicalEra {
532    #[serde(rename = "地質時代_上端深度")]
533    pub start_depth: Option<String>,
534    #[serde(rename = "地質時代_下端深度")]
535    pub end_depth: Option<String>,
536    #[serde(rename = "地質時代_コード")]
537    pub code: Option<String>,
538    #[serde(rename = "地質時代_時代名")]
539    pub name: Option<String>,
540}
541
542#[derive(Debug, Serialize, Deserialize)]
543pub struct GeostratumClassification {
544    #[serde(rename = "地層区分_上端深度")]
545    pub start_depth: Option<String>,
546    #[serde(rename = "地層区分_下端深度")]
547    pub end_depth: Option<String>,
548    #[serde(rename = "地層区分_地層名")]
549    pub rock_body_name: Option<String>,
550}
551
552#[derive(Debug, Serialize, Deserialize, PartialEq)]
553pub struct BoreholeWaterLevel {
554    #[serde(default, rename = "孔内水位_測定年")]
555    pub year: Option<String>,
556    #[serde(default, rename = "孔内水位_測定月")]
557    pub month: Option<String>,
558    #[serde(default, rename = "孔内水位_測定日")]
559    pub day: Option<String>,
560    #[serde(default, rename = "孔内水位_掘削深度")]
561    pub depth: Option<String>,
562    #[serde(default, rename = "孔内水位_孔内水位")]
563    pub water_level: Option<String>,
564    #[serde(default, rename = "孔内水位_水位種別")]
565    pub water_level_type: Option<String>,
566}
567
568#[derive(Debug, Serialize, Deserialize)]
569pub struct DrillingProcess {
570    #[serde(default, rename = "掘削工程_測定年")]
571    pub measurement_year: Option<String>,
572    #[serde(default, rename = "掘削工程_測定月")]
573    pub measurement_month: Option<String>,
574    #[serde(default, rename = "掘削工程_測定日")]
575    pub measurement_day: Option<String>,
576    #[serde(default, rename = "掘削工程_掘進深度")]
577    pub drilling_depth: Option<String>,
578}
579
580#[derive(Debug, Clone, Serialize, Deserialize)]
581pub struct BoreholeWallProtection {
582    #[serde(default, rename = "孔径孔壁保護_上端深度")]
583    pub upper_depth: Option<String>,
584    #[serde(default, rename = "孔径孔壁保護_下端深度")]
585    pub lower_depth: Option<String>,
586    #[serde(default, rename = "孔径孔壁保護_孔径")]
587    pub diameter: Option<String>,
588    #[serde(default, rename = "孔径孔壁保護_孔壁保護")]
589    pub wall_protection: Option<String>,
590    #[serde(default, rename = "孔径孔壁保護_送水条件")]
591    pub water_supply_condition: Option<String>,
592}
593
594#[derive(Debug, Serialize, Deserialize)]
595pub struct FaultClassification {
596    #[serde(default, rename = "断層区分_上端深度")]
597    pub upper_depth: Option<String>,
598    #[serde(default, rename = "断層区分_下端深度")]
599    pub lower_depth: Option<String>,
600    #[serde(default, rename = "断層区分_性状")]
601    pub property: Option<String>,
602}
603
604// ============================================================================
605// ClassificationInfo trait implementation
606// ============================================================================
607
608impl ClassificationInfo for GeologicalClassification {
609    fn rock_groups(&self) -> Vec<RockGroupInfo> {
610        let mut constituents = Vec::new();
611
612        if let Some(name) = &self.classification1
613            && !name.is_empty()
614        {
615            constituents.push(Constituent::Named {
616                name: name.clone(),
617                symbol: self.code1.clone(),
618            });
619        }
620
621        if let Some(name) = &self.classification2
622            && !name.is_empty()
623        {
624            constituents.push(Constituent::Named {
625                name: name.clone(),
626                symbol: self.code2.clone(),
627            });
628        }
629
630        let code = if constituents.len() > 1 {
631            RockGroupCode::Interbedded
632        } else {
633            RockGroupCode::Single
634        };
635
636        vec![RockGroupInfo { code, constituents }]
637    }
638}