use std::collections::HashMap;
use super::{Resource, ResourceCommon, Updatable};
use super::id::*;
use super::status::*;
#[derive(Clone, Debug, Deserialize, Resource, Serialize, Updatable)]
#[api_name = "source"]
pub struct Source {
#[serde(flatten)]
#[updatable(flatten)]
pub common: ResourceCommon,
pub resource: Id<Source>,
pub status: GenericStatus,
pub file_name: String,
pub md5: String,
pub size: u64,
#[updatable]
pub fields: Option<HashMap<String, Field>>,
#[serde(skip)]
_placeholder: (),
}
#[derive(Debug, Serialize)]
pub struct Args {
pub remote: String,
#[serde(skip)]
_placeholder: (),
}
impl Args {
pub fn new<S: Into<String>>(remote: S) -> Args {
Args {
remote: remote.into(),
_placeholder: (),
}
}
}
impl super::Args for Args {
type Resource = Source;
}
#[derive(Clone, Debug, Deserialize, Serialize, Updatable)]
pub struct Field {
pub name: String,
#[updatable]
pub optype: Optype,
#[serde(skip)]
_placeholder: (),
}
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
pub enum Optype {
#[serde(rename="numeric")]
Numeric,
#[serde(rename="categorical")]
Categorical,
#[serde(rename="text")]
Text,
#[serde(rename="items")]
Items,
}
impl Updatable for Optype {
type Update = Self;
}
#[test]
fn update_source_name() {
use super::ResourceCommonUpdate;
let source_update = SourceUpdate {
common: Some(ResourceCommonUpdate{
name: Some("example".to_owned()),
.. ResourceCommonUpdate::default()
}),
.. SourceUpdate::default()
};
assert_eq!(json!(source_update), json!({ "name": "example" }));
}