use serde::{Deserialize, Serialize};
use std::any;
use std::fmt;
use std::str;
use crate::Error;
use super::{Node, NodeId};
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct Reference(pub String);
impl Reference {
pub fn is_definitely_a1_format(&self) -> bool {
for c in self.0.chars() {
if !c.is_alphanumeric() && c != '_' {
return true
}
}
false
}
}
#[cfg(test)]
mod tests {
use std::str::FromStr;
use super::*;
use super::super::*;
#[test]
fn is_definitely_a1_format() {
let r1 = Reference("A1:B2".to_string());
assert!(r1.is_definitely_a1_format());
let r2 = Reference("Sheet1!C3".to_string());
assert!(r2.is_definitely_a1_format());
let r3 = Reference("A1".to_string());
assert!(!r3.is_definitely_a1_format());
}
#[test]
fn display() {
assert_eq!("foo", Reference::new("foo").to_string());
}
#[test]
fn from_str() {
assert_eq!(Reference::new("bar"), Reference::from_str("bar").unwrap());
}
#[test]
fn node_eq() {
assert!(Node::node_eq(&Reference::new("foo"), &Reference::new("foo")))
}
#[test]
fn node_eq_false() {
assert!(!Node::node_eq(&Reference::new("foo"), &Reference::new("bar")));
assert!(!Node::node_eq(&Reference::new("foo"), &Float(123.0)))
}
}