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 = "ローカル座標")] 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 = "港湾局指定コード")] pub port_authority_code: Option<PortAuthorityCode>,
48}
49
50#[derive(Debug, Serialize, Deserialize)]
51pub struct BasicSurvey {
52 #[serde(rename = "事業工事名")] pub project_name: Option<String>,
54 #[serde(rename = "調査名")] pub survey_name: Option<String>,
56 #[serde(rename = "調査目的")] pub survey_purpose: Option<String>,
58 #[serde(rename = "調査対象")] pub survey_target: Option<String>,
60 #[serde(rename = "ボーリング名")] pub boring_name: Option<String>,
62 #[serde(rename = "ボーリング連番")] pub boring_serial: Option<String>,
64 #[serde(rename = "ボーリング総数")] pub total_boring: Option<String>,
66}
67
68#[derive(Debug, Serialize, Deserialize)]
69pub struct LngLat {
70 #[serde(rename = "経度_度")] pub longitude_degree: Option<String>,
72 #[serde(rename = "経度_分")] pub longitude_minute: Option<String>,
74 #[serde(rename = "経度_秒")] pub longitude_second: Option<String>,
76 #[serde(rename = "緯度_度")] pub latitude_degree: Option<String>,
78 #[serde(rename = "緯度_分")] pub latitude_minute: Option<String>,
80 #[serde(rename = "緯度_秒")] pub latitude_second: Option<String>,
82 #[serde(rename = "取得方法コード")] pub acquisition_method_code: Option<String>,
84 #[serde(rename = "読取精度コード")] pub reading_precision_code: Option<String>,
86 #[serde(rename = "測地系")] pub geodetic_system: Option<String>,
88}
89
90#[derive(Debug, Serialize, Deserialize, PartialEq)]
91pub struct LocalCoordinateDefinition {
92 #[serde(rename = "X座標定義")] pub x_definition: Option<String>,
94 #[serde(rename = "X座標")] pub x: Option<String>,
96 #[serde(rename = "Y座標定義")] pub y_definition: Option<String>,
98 #[serde(rename = "Y座標")] pub y: Option<String>,
100 #[serde(rename = "Z座標定義")] pub z_definition: Option<String>,
102 #[serde(rename = "Z座標")] pub z: Option<String>,
104}
105
106#[derive(Debug, Serialize, Deserialize)]
107pub struct SurveyPosition {
108 #[serde(rename = "調査位置住所")] pub address: Option<String>,
110 #[serde(rename = "コード1次")] pub code1: Option<String>,
112 #[serde(rename = "コード2次")] pub code2: Option<String>,
114 #[serde(rename = "コード3次")] pub code3: Option<String>,
116}
117
118#[derive(Debug, Serialize, Deserialize)]
119pub struct OrderInstitution {
120 #[serde(rename = "発注機関名称")] pub name: Option<String>,
122 #[serde(rename = "テクリスコード")] pub code: Option<String>,
124}
125
126#[derive(Debug, Serialize, Deserialize)]
127pub struct SurveyPeriod {
128 #[serde(rename = "調査期間_開始年")] pub start_year: Option<String>,
130 #[serde(rename = "調査期間_開始月")] pub start_month: Option<String>,
132 #[serde(rename = "調査期間_開始日")] pub start_day: Option<String>,
134 #[serde(rename = "調査期間_終了年")] pub end_year: Option<String>,
136 #[serde(rename = "調査期間_終了月")] pub end_month: Option<String>,
138 #[serde(rename = "調査期間_終了日")] pub end_day: Option<String>,
140}
141
142#[derive(Debug, Serialize, Deserialize)]
143pub struct SurveyCompany {
144 #[serde(rename = "調査会社_名称")] pub name: Option<String>,
146 #[serde(rename = "調査会社_TEL")] pub tel: Option<String>,
148 #[serde(rename = "調査会社_主任技師")] pub chief_engineer: Option<String>,
150 #[serde(rename = "調査会社_現場代理人")] pub field_agent: Option<String>,
152 #[serde(rename = "調査会社_コア鑑定者")] pub core_appraiser: Option<String>,
154 #[serde(rename = "調査会社_ボーリング責任者")] pub boring_manager: Option<String>,
156}
157
158#[derive(Debug, Serialize, Deserialize)]
159pub struct BoringBasicInfo {
160 #[serde(rename = "孔口標高")] pub surface_elevation: Option<String>,
162 #[serde(rename = "総掘進長")] pub total_drilling_length: Option<String>,
164 #[serde(rename = "地質柱状図様式")] pub columnar_section_style: Option<String>,
166 #[serde(default, rename = "掘進角度")] pub angle: Option<String>,
168 #[serde(default, rename = "掘進方位")] pub azimuth: Option<String>,
170 #[serde(rename = "地盤勾配")] 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 = "孔内水平載荷試験_試験深度")] pub depth: Option<String>,
362 #[serde(rename = "孔内水平載荷試験_試験方法コード")] pub method_code: Option<String>,
364 #[serde(default, rename = "孔内水平載荷試験_試験方法")] pub method: Option<String>,
366 #[serde(rename = "孔内水平載荷試験_初期圧")] pub initial_pressure: Option<String>,
368 #[serde(rename = "孔内水平載荷試験_降伏圧")] pub yield_pressure: Option<String>,
370 #[serde(rename = "孔内水平載荷試験_変形係数")] pub deformation_coefficient: Option<String>,
372}
373
374#[derive(Debug, Serialize, Deserialize)]
375pub struct BoreholeDrilledWellTest {
376 #[serde(rename = "透水試験_上端深度")] pub start_depth: Option<String>,
378 #[serde(rename = "透水試験_下端深度")] pub end_depth: Option<String>,
380 #[serde(rename = "透水試験_試験コード")] pub test_code: Option<String>,
382 #[serde(default, rename = "透水試験_試験方法")] pub test_method: Option<String>,
384 #[serde(rename = "透水試験_透水係数")] 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 = "土質試験結果_試料番号")] pub sample_number: Option<String>,
438 #[serde(rename = "土質試験結果_上端深度")] pub start_depth: Option<String>,
440 #[serde(rename = "土質試験結果_下端深度")] pub end_depth: Option<String>,
442 #[serde(default, rename = "土質試験結果_湿潤密度")] pub wet_density: Option<String>,
444 #[serde(default, rename = "土質試験結果_乾燥密度")] pub dry_density: Option<String>,
446 #[serde(default, rename = "土質試験結果_土粒子密度")] pub soil_particle_density: Option<String>,
448 #[serde(default, rename = "土質試験結果_自然含水比")] pub natural_water_content: Option<String>,
450 #[serde(default, rename = "土質試験結果_間隙比")] pub void_ratio: Option<String>,
452 #[serde(default, rename = "土質試験結果_飽和度")] pub saturation: Option<String>,
454 #[serde(default, rename = "土質試験結果_粒度_石")] pub stone: Option<String>,
456 #[serde(default, rename = "土質試験結果_粒度_礫")] pub gravel: Option<String>,
458 #[serde(default, rename = "土質試験結果_粒度_砂")] pub sand: Option<String>,
460 #[serde(default, rename = "土質試験結果_粒度_シルト")] pub silt: Option<String>,
462 #[serde(default, rename = "土質試験結果_粒度_粘土")] pub clay: Option<String>,
464 #[serde(default, rename = "土質試験結果_粒度_最大粒径")] pub max_grain_size: Option<String>,
466 #[serde(default, rename = "土質試験結果_粒度_均等係数")] pub equal_coefficient: Option<String>,
468 #[serde(default, rename = "土質試験結果_液性限界")] pub liquidity_limit: Option<String>,
470 #[serde(default, rename = "土質試験結果_塑性限界")] pub plasticity_limit: Option<String>,
472 #[serde(default, rename = "土質試験結果_塑性指数")] pub plasticity_index: Option<String>,
474 #[serde(default, rename = "土質試験結果_地盤材料名")] pub soil_name: Option<String>,
476 #[serde(default, rename = "土質試験結果_地盤材料記号")] pub soil_symbol: Option<String>,
478 #[serde(default, rename = "土質試験結果_圧密試験方法")] pub compression_test_method: Option<String>,
480 #[serde(default, rename = "土質試験結果_圧縮指数")] pub compression_index: Option<String>,
482 #[serde(default, rename = "土質試験結果_圧密降伏応力")] pub compression_yield_stress: Option<String>,
484 #[serde(default, rename = "土質試験結果_体積圧縮係数")] pub volume_compression_coefficient: Option<String>,
486 #[serde(default, rename = "土質試験結果_圧密係数")] pub compression_coefficient: Option<String>,
488 #[serde(default, rename = "土質試験結果_応力範囲")] pub stress_range: Option<String>,
490 #[serde(default, rename = "土質試験結果_一軸圧縮強さ1")] pub compression_strength_1: Option<String>,
492 #[serde(default, rename = "土質試験結果_一軸圧縮強さ2")] pub compression_strength_2: Option<String>,
494 #[serde(default, rename = "土質試験結果_一軸圧縮強さ3")] pub compression_strength_3: Option<String>,
496 #[serde(default, rename = "土質試験結果_一軸圧縮強さ4")] pub compression_strength_4: Option<String>,
498 #[serde(default, rename = "土質試験結果_一軸試験破壊ひずみ1")] pub compression_failure_1: Option<String>,
500 #[serde(default, rename = "土質試験結果_一軸試験破壊ひずみ2")] pub compression_failure_2: Option<String>,
502 #[serde(default, rename = "土質試験結果_一軸試験破壊ひずみ3")] pub compression_failure_3: Option<String>,
504 #[serde(default, rename = "土質試験結果_一軸試験破壊ひずみ4")] pub compression_failure_4: Option<String>,
506 #[serde(default, rename = "土質試験結果_一軸試験鋭敏比")] pub compression_sharpness_ratio: Option<String>,
508 #[serde(default, rename = "土質試験結果_せん断試験条件")] pub tensile_test_condition: Option<String>,
510 #[serde(default, rename = "土質試験結果_せん断強さ_全応力")] pub tensile_strength_total: Option<String>,
512 #[serde(default, rename = "土質試験結果_せん断抵抗角_全応力")] pub tensile_resistance_angle_total: Option<String>,
514 #[serde(default, rename = "土質試験結果_せん断強さ_有効応力")] pub tensile_strength_effective: Option<String>,
516 #[serde(default, rename = "土質試験結果_せん断抵抗角_有効応力")] pub tensile_resistance_angle_effective: Option<String>,
518 #[serde(default, rename = "土質試験結果_試料状態")] 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
604impl 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}