Pre: add Variable::from_valid_name, TypedValue::{typed_string,typed_ns_keyword}.

This commit is contained in:
Richard Newman 2017-03-29 14:11:00 -07:00
parent 439f3a2283
commit 460fdac252
2 changed files with 39 additions and 4 deletions

View file

@ -93,6 +93,20 @@ impl TypedValue {
&TypedValue::Keyword(_) => ValueType::Keyword,
}
}
/// Construct a new `TypedValue::Keyword` instance by cloning the provided
/// values. This is expensive, so this might
/// be best limited to tests.
pub fn typed_ns_keyword(ns: &str, name: &str) -> TypedValue {
TypedValue::Keyword(NamespacedKeyword::new(ns, name))
}
/// Construct a new `TypedValue::String` instance by cloning the provided
/// value. This is expensive, so this might
/// be best limited to tests.
pub fn typed_string(s: &str) -> TypedValue {
TypedValue::String(s.to_string())
}
}
// Put this here rather than in `db` simply because it's widely needed.
@ -141,9 +155,9 @@ impl SQLValueType for ValueType {
fn test_typed_value() {
assert!(TypedValue::Boolean(false).is_congruent_with(None));
assert!(TypedValue::Boolean(false).is_congruent_with(ValueType::Boolean));
assert!(!TypedValue::String("foo".to_string()).is_congruent_with(ValueType::Boolean));
assert!(TypedValue::String("foo".to_string()).is_congruent_with(ValueType::String));
assert!(TypedValue::String("foo".to_string()).is_congruent_with(None));
assert!(!TypedValue::typed_string("foo").is_congruent_with(ValueType::Boolean));
assert!(TypedValue::typed_string("foo").is_congruent_with(ValueType::String));
assert!(TypedValue::typed_string("foo").is_congruent_with(None));
}
/// Bit flags used in `flags0` column in temporary tables created during search,

View file

@ -44,6 +44,27 @@ pub type SrcVarName = String; // Do not include the required syntactic
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct Variable(pub PlainSymbol);
impl Variable {
pub fn as_str(&self) -> &str {
(self.0).0.as_str()
}
pub fn to_string(&self) -> String {
(self.0).0.clone()
}
pub fn name(&self) -> PlainSymbol {
self.0.clone()
}
/// Return a new `Variable`, assuming that the provided string is a valid name.
pub fn from_valid_name(name: &str) -> Variable {
let s = PlainSymbol::new(name);
assert!(s.is_var_symbol());
Variable(s)
}
}
pub trait FromValue<T> {
fn from_value(v: &edn::Value) -> Option<T>;
}
@ -633,4 +654,4 @@ impl ContainsVariables for Pattern {
acc_ref(acc, v)
}
}
}
}