summaryrefslogtreecommitdiffstats
path: root/src/schema/value.rs
diff options
context:
space:
mode:
authorPaul Masurel <paul.masurel@gmail.com>2018-01-25 12:46:32 +0900
committerPaul Masurel <paul.masurel@gmail.com>2018-01-25 12:46:32 +0900
commit3edb3dce6a8fdde9cbca118742d6133f9ea2043b (patch)
tree352fd4c4c6546f6ead7ac90eae9fe53e03d966d8 /src/schema/value.rs
parent1edaf7a3126eda8be6c50592c53b3b0fc19cb9bf (diff)
Test not passing
Diffstat (limited to 'src/schema/value.rs')
-rw-r--r--src/schema/value.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/schema/value.rs b/src/schema/value.rs
index 1456504..eaf66f1 100644
--- a/src/schema/value.rs
+++ b/src/schema/value.rs
@@ -1,6 +1,7 @@
use std::fmt;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde::de::Visitor;
+use schema::Facet;
/// Value represents the value of a any field.
/// It is an enum over all over all of the possible field type.
@@ -12,6 +13,8 @@ pub enum Value {
U64(u64),
/// Signed 64-bits Integer `i64`
I64(i64),
+ /// Hierarchical Facet
+ Facet(Facet),
}
impl Serialize for Value {
@@ -23,6 +26,7 @@ impl Serialize for Value {
Value::Str(ref v) => serializer.serialize_str(v),
Value::U64(u) => serializer.serialize_u64(u),
Value::I64(u) => serializer.serialize_i64(u),
+ Value::Facet(ref facet) => facet.serialize(serializer)
}
}
}
@@ -121,14 +125,22 @@ impl<'a> From<&'a str> for Value {
}
}
+impl<'a> From<Facet> for Value {
+ fn from(facet: Facet) -> Value {
+ Value::Facet(facet)
+ }
+}
+
mod binary_serialize {
use common::BinarySerializable;
use std::io::{self, Read, Write};
use super::Value;
+ use schema::Facet;
const TEXT_CODE: u8 = 0;
const U64_CODE: u8 = 1;
const I64_CODE: u8 = 2;
+ const HIERARCHICAL_FACET_CODE: u8 = 3;
impl BinarySerializable for Value {
fn serialize<W: Write>(&self, writer: &mut W) -> io::Result<()> {
@@ -145,6 +157,10 @@ mod binary_serialize {
I64_CODE.serialize(writer)?;
val.serialize(writer)
}
+ Value::Facet(ref facet) => {
+ HIERARCHICAL_FACET_CODE.serialize(writer)?;
+ facet.serialize(writer)
+ }
}
}
fn deserialize<R: Read>(reader: &mut R) -> io::Result<Self> {
@@ -162,6 +178,9 @@ mod binary_serialize {
let value = i64::deserialize(reader)?;
Ok(Value::I64(value))
}
+ HIERARCHICAL_FACET_CODE => {
+ Ok(Value::Facet(Facet::deserialize(reader)?))
+ }
_ => Err(io::Error::new(
io::ErrorKind::InvalidData,
format!("No field type is associated with code {:?}", type_code),