My personal project and infrastructure archive
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nomicon/development/libs/barrel/src/tests/common/cloning.rs

91 lines
2.2 KiB

use crate::{
types::{self, Type},
Migration,
};
use std::fmt;
#[derive(PartialEq, Clone, Copy)]
pub enum DataTypes {
Bool,
F64,
I64,
String,
}
impl DataTypes {
#[allow(unused)]
pub fn string(&self) -> &str {
match *self {
DataTypes::Bool => "bool",
DataTypes::F64 => "f64",
DataTypes::I64 => "i64",
DataTypes::String => "String",
}
}
pub fn to_database_type(&self) -> Type {
match *self {
DataTypes::Bool => types::text(),
DataTypes::F64 => types::double(),
DataTypes::I64 => types::integer(),
DataTypes::String => types::text(),
}
}
}
impl fmt::Debug for DataTypes {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let printable = match *self {
DataTypes::Bool => "",
DataTypes::F64 => "f64",
DataTypes::I64 => "i64",
DataTypes::String => "string",
};
write!(f, "{:#?}", printable)
}
}
#[derive(Clone)]
pub struct ColumnDef {
pub name: String,
pub data_type: DataTypes,
}
impl ColumnDef {
pub fn new(name: String, data_type: DataTypes) -> ColumnDef {
ColumnDef {
name: name,
data_type: data_type,
}
}
}
impl fmt::Debug for ColumnDef {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}: {:?}", self.name, self.data_type)
}
}
pub fn create_table_if_not_exists(name: &str, columns: &Vec<ColumnDef>) {
let mut m = Migration::new();
let cols = columns.clone();
m.create_table(name, move |t| {
for cd in &cols {
let cname: &str = &cd.name;
t.add_column(cname, cd.data_type.to_database_type());
}
});
}
#[test]
fn barrel_reverse_integration() {
let cols = vec![
ColumnDef::new("name".into(), DataTypes::String),
ColumnDef::new("age".into(), DataTypes::I64),
ColumnDef::new("coolness".into(), DataTypes::F64),
ColumnDef::new("plushy_sharks_owned".into(), DataTypes::Bool),
];
// We just call this function and hope it doesn't panic
create_table_if_not_exists("users", &cols);
}