gen-models 0.1.31

Models for the gen sequence graph and version control system.
Documentation
use rusqlite::{
    ToSql,
    types::{FromSql, FromSqlResult, ToSqlOutput, Value, ValueRef},
};
use serde::{Deserialize, Serialize};

use crate::gen_models_capnp;

#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Deserialize, Serialize)]
pub enum FileTypes {
    GenBank,
    Fasta,
    GFA,
    GAF,
    VCF,
    Changeset,
    CSV,
    Gff3,
    Bed,
    Tabix,
    None,
}

impl ToSql for FileTypes {
    fn to_sql(&self) -> rusqlite::Result<ToSqlOutput<'_>> {
        let result = match self {
            FileTypes::GenBank => "gb".into(),
            FileTypes::Fasta => "fasta".into(),
            FileTypes::GFA => "gfa".into(),
            FileTypes::VCF => "vcf".into(),
            FileTypes::Changeset => "changeset".into(),
            FileTypes::CSV => "csv".into(),
            FileTypes::GAF => "gaf".into(),
            FileTypes::Gff3 => "gff3".into(),
            FileTypes::Bed => "bed".into(),
            FileTypes::Tabix => "tabix".into(),
            FileTypes::None => "none".into(),
        };
        Ok(result)
    }
}

impl From<FileTypes> for Value {
    fn from(value: FileTypes) -> Value {
        let result = match value {
            FileTypes::GenBank => "gb",
            FileTypes::Fasta => "fasta",
            FileTypes::GFA => "gfa",
            FileTypes::VCF => "vcf",
            FileTypes::Changeset => "changeset",
            FileTypes::CSV => "csv",
            FileTypes::GAF => "gaf",
            FileTypes::Gff3 => "gff3",
            FileTypes::Bed => "bed",
            FileTypes::Tabix => "tabix",
            FileTypes::None => "none",
        };
        Value::Text(result.to_string())
    }
}

impl FromSql for FileTypes {
    fn column_result(value: ValueRef) -> FromSqlResult<Self> {
        let result = match value.as_str() {
            Ok("gb") => FileTypes::GenBank,
            Ok("fasta") => FileTypes::Fasta,
            Ok("gfa") => FileTypes::GFA,
            Ok("vcf") => FileTypes::VCF,
            Ok("changeset") => FileTypes::Changeset,
            Ok("csv") => FileTypes::CSV,
            Ok("gaf") => FileTypes::GAF,
            Ok("gff3") => FileTypes::Gff3,
            Ok("bed") => FileTypes::Bed,
            Ok("tabix") => FileTypes::Tabix,
            Ok("none") => FileTypes::None,
            _ => panic!("Invalid entry in database"),
        };
        Ok(result)
    }
}
impl From<FileTypes> for gen_models_capnp::FileType {
    fn from(value: FileTypes) -> gen_models_capnp::FileType {
        match value {
            FileTypes::GenBank => gen_models_capnp::FileType::GenBank,
            FileTypes::Fasta => gen_models_capnp::FileType::Fasta,
            FileTypes::GFA => gen_models_capnp::FileType::Gfa,
            FileTypes::GAF => gen_models_capnp::FileType::Gaf,
            FileTypes::VCF => gen_models_capnp::FileType::Vcf,
            FileTypes::Changeset => gen_models_capnp::FileType::Changeset,
            FileTypes::CSV => gen_models_capnp::FileType::Csv,
            FileTypes::Gff3 => gen_models_capnp::FileType::Gff3,
            FileTypes::Bed => gen_models_capnp::FileType::Bed,
            FileTypes::Tabix => gen_models_capnp::FileType::Tabix,
            FileTypes::None => gen_models_capnp::FileType::None,
        }
    }
}

impl From<gen_models_capnp::FileType> for FileTypes {
    fn from(value: gen_models_capnp::FileType) -> FileTypes {
        match value {
            gen_models_capnp::FileType::GenBank => FileTypes::GenBank,
            gen_models_capnp::FileType::Fasta => FileTypes::Fasta,
            gen_models_capnp::FileType::Gfa => FileTypes::GFA,
            gen_models_capnp::FileType::Gaf => FileTypes::GAF,
            gen_models_capnp::FileType::Vcf => FileTypes::VCF,
            gen_models_capnp::FileType::Changeset => FileTypes::Changeset,
            gen_models_capnp::FileType::Csv => FileTypes::CSV,
            gen_models_capnp::FileType::Gff3 => FileTypes::Gff3,
            gen_models_capnp::FileType::Bed => FileTypes::Bed,
            gen_models_capnp::FileType::Tabix => FileTypes::Tabix,
            gen_models_capnp::FileType::None => FileTypes::None,
        }
    }
}

impl FileTypes {
    pub fn suffix(file_type: FileTypes) -> String {
        let result = match file_type {
            FileTypes::GenBank => "gb",
            FileTypes::Fasta => "fa",
            FileTypes::GFA => "gfa",
            FileTypes::VCF => "vcf",
            FileTypes::Changeset => "cs",
            FileTypes::CSV => "csv",
            FileTypes::GAF => "gaf",
            FileTypes::Gff3 => "gff3",
            FileTypes::Bed => "bed",
            FileTypes::Tabix => "tbi",
            FileTypes::None => "none",
        };

        result.to_string()
    }
}