Skip to main content

gen_models/
file_types.rs

1use rusqlite::{
2    ToSql,
3    types::{FromSql, FromSqlResult, ToSqlOutput, Value, ValueRef},
4};
5use serde::{Deserialize, Serialize};
6
7use crate::gen_models_capnp;
8
9#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Deserialize, Serialize)]
10pub enum FileTypes {
11    GenBank,
12    Fasta,
13    GFA,
14    GAF,
15    VCF,
16    Changeset,
17    CSV,
18    Gff3,
19    Bed,
20    Tabix,
21    None,
22}
23
24impl ToSql for FileTypes {
25    fn to_sql(&self) -> rusqlite::Result<ToSqlOutput<'_>> {
26        let result = match self {
27            FileTypes::GenBank => "gb".into(),
28            FileTypes::Fasta => "fasta".into(),
29            FileTypes::GFA => "gfa".into(),
30            FileTypes::VCF => "vcf".into(),
31            FileTypes::Changeset => "changeset".into(),
32            FileTypes::CSV => "csv".into(),
33            FileTypes::GAF => "gaf".into(),
34            FileTypes::Gff3 => "gff3".into(),
35            FileTypes::Bed => "bed".into(),
36            FileTypes::Tabix => "tabix".into(),
37            FileTypes::None => "none".into(),
38        };
39        Ok(result)
40    }
41}
42
43impl From<FileTypes> for Value {
44    fn from(value: FileTypes) -> Value {
45        let result = match value {
46            FileTypes::GenBank => "gb",
47            FileTypes::Fasta => "fasta",
48            FileTypes::GFA => "gfa",
49            FileTypes::VCF => "vcf",
50            FileTypes::Changeset => "changeset",
51            FileTypes::CSV => "csv",
52            FileTypes::GAF => "gaf",
53            FileTypes::Gff3 => "gff3",
54            FileTypes::Bed => "bed",
55            FileTypes::Tabix => "tabix",
56            FileTypes::None => "none",
57        };
58        Value::Text(result.to_string())
59    }
60}
61
62impl FromSql for FileTypes {
63    fn column_result(value: ValueRef) -> FromSqlResult<Self> {
64        let result = match value.as_str() {
65            Ok("gb") => FileTypes::GenBank,
66            Ok("fasta") => FileTypes::Fasta,
67            Ok("gfa") => FileTypes::GFA,
68            Ok("vcf") => FileTypes::VCF,
69            Ok("changeset") => FileTypes::Changeset,
70            Ok("csv") => FileTypes::CSV,
71            Ok("gaf") => FileTypes::GAF,
72            Ok("gff3") => FileTypes::Gff3,
73            Ok("bed") => FileTypes::Bed,
74            Ok("tabix") => FileTypes::Tabix,
75            Ok("none") => FileTypes::None,
76            _ => panic!("Invalid entry in database"),
77        };
78        Ok(result)
79    }
80}
81impl From<FileTypes> for gen_models_capnp::FileType {
82    fn from(value: FileTypes) -> gen_models_capnp::FileType {
83        match value {
84            FileTypes::GenBank => gen_models_capnp::FileType::GenBank,
85            FileTypes::Fasta => gen_models_capnp::FileType::Fasta,
86            FileTypes::GFA => gen_models_capnp::FileType::Gfa,
87            FileTypes::GAF => gen_models_capnp::FileType::Gaf,
88            FileTypes::VCF => gen_models_capnp::FileType::Vcf,
89            FileTypes::Changeset => gen_models_capnp::FileType::Changeset,
90            FileTypes::CSV => gen_models_capnp::FileType::Csv,
91            FileTypes::Gff3 => gen_models_capnp::FileType::Gff3,
92            FileTypes::Bed => gen_models_capnp::FileType::Bed,
93            FileTypes::Tabix => gen_models_capnp::FileType::Tabix,
94            FileTypes::None => gen_models_capnp::FileType::None,
95        }
96    }
97}
98
99impl From<gen_models_capnp::FileType> for FileTypes {
100    fn from(value: gen_models_capnp::FileType) -> FileTypes {
101        match value {
102            gen_models_capnp::FileType::GenBank => FileTypes::GenBank,
103            gen_models_capnp::FileType::Fasta => FileTypes::Fasta,
104            gen_models_capnp::FileType::Gfa => FileTypes::GFA,
105            gen_models_capnp::FileType::Gaf => FileTypes::GAF,
106            gen_models_capnp::FileType::Vcf => FileTypes::VCF,
107            gen_models_capnp::FileType::Changeset => FileTypes::Changeset,
108            gen_models_capnp::FileType::Csv => FileTypes::CSV,
109            gen_models_capnp::FileType::Gff3 => FileTypes::Gff3,
110            gen_models_capnp::FileType::Bed => FileTypes::Bed,
111            gen_models_capnp::FileType::Tabix => FileTypes::Tabix,
112            gen_models_capnp::FileType::None => FileTypes::None,
113        }
114    }
115}
116
117impl FileTypes {
118    pub fn suffix(file_type: FileTypes) -> String {
119        let result = match file_type {
120            FileTypes::GenBank => "gb",
121            FileTypes::Fasta => "fa",
122            FileTypes::GFA => "gfa",
123            FileTypes::VCF => "vcf",
124            FileTypes::Changeset => "cs",
125            FileTypes::CSV => "csv",
126            FileTypes::GAF => "gaf",
127            FileTypes::Gff3 => "gff3",
128            FileTypes::Bed => "bed",
129            FileTypes::Tabix => "tbi",
130            FileTypes::None => "none",
131        };
132
133        result.to_string()
134    }
135}