osm-io 0.3.0

Read and write OSM data
Documentation
use std::path::PathBuf;

use crate::osm::apidb_dump::read::table_fields::TableFields;
use crate::osm::apidb_dump::read::table_pkey::TablePkey;

#[derive(Debug, Clone)]
pub(crate) struct TableDef {
    name: String,
    path: PathBuf,
    sorted_path: PathBuf,
    tmp_path: PathBuf,
    fields: TableFields,
    pkey: TablePkey,
}

impl TableDef {
    fn build_sorted_path(name: String, mut path: PathBuf) -> PathBuf {
        path.push(PathBuf::from(format!("sorted-{}.dat", name)));
        path
    }

    pub(crate) fn new(name: String, path: PathBuf, tmp_path: PathBuf, fields: Vec<String>) -> Result<TableDef, anyhow::Error> {
        let table_def = TableDef {
            name: name.clone(),
            path: path.clone(),
            sorted_path: Self::build_sorted_path(name.clone(), tmp_path.clone()),
            tmp_path,
            fields: TableFields::new(name.clone(), fields.clone())?,
            pkey: TablePkey::new(name.clone(), fields.clone())?,
        };
        Ok(table_def)
    }

    pub(crate) fn name(&self) -> String {
        self.name.clone()
    }

    pub(crate) fn path(&self) -> PathBuf {
        self.path.clone()
    }

    pub(crate) fn sorted_path(&self) -> PathBuf {
        self.sorted_path.clone()
    }

    pub(crate) fn tmp_path(&self) -> PathBuf {
        self.tmp_path.clone()
    }

    #[allow(dead_code)]
    pub(crate) fn fields(&self) -> TableFields {
        self.fields
    }

    pub(crate) fn fields_ref(&self) -> &TableFields {
        &self.fields
    }

    pub(crate) fn pkey(&self) -> TablePkey {
        self.pkey.clone()
    }
}