use std::fmt::{Debug, Display};
use super::{PropertyType, ToSgf};
use crate::InvalidNodeError;
pub trait SgfProp: Debug + Display + Sized + Clone + Eq + private::Sealed {
type Point: Debug + Clone + PartialEq + Eq + std::hash::Hash + ToSgf;
type Stone: Debug + Clone + PartialEq + Eq + std::hash::Hash + ToSgf;
type Move: Debug + Clone + PartialEq + Eq + ToSgf;
fn new(identifier: String, values: Vec<String>) -> Self;
fn identifier(&self) -> String;
fn property_type(&self) -> Option<PropertyType>;
fn validate_properties(properties: &[Self], is_root: bool) -> Result<(), InvalidNodeError>;
}
mod private {
pub trait Sealed {}
impl Sealed for crate::go::Prop {}
impl Sealed for crate::unknown_game::Prop {}
impl<T> Sealed for &T where T: ?Sized + Sealed {}
}