diff --git a/sgf/src/game.rs b/sgf/src/game.rs index e1d967b..dd8ffc2 100644 --- a/sgf/src/game.rs +++ b/sgf/src/game.rs @@ -2,6 +2,7 @@ use crate::{ parser::{self, Annotation, Evaluation, Move, SetupInstr, Size, UnknownProperty}, Color, Date, GameResult, GameType, }; +use serde::{Deserialize, Serialize}; use std::{collections::HashSet, time::Duration}; use uuid::Uuid; @@ -36,7 +37,7 @@ pub enum GameNodeError { ConflictingPosition, } -#[derive(Clone, Debug, PartialEq, Default)] +#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize)] pub struct Player { pub name: Option, pub rank: Option, @@ -51,7 +52,7 @@ pub struct Player { /// syntax issues, the result of the Game is to have a fully-understood game. However, this doesn't /// (yet?) go quite to the level of apply the game type (i.e., this is Go, Chess, Yinsh, or /// whatever). -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub struct Game { pub game_type: GameType, @@ -216,7 +217,7 @@ impl TryFrom<&parser::Tree> for Game { } } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub enum GameNode { MoveNode(MoveNode), SetupNode(SetupNode), @@ -317,7 +318,7 @@ impl TryFrom<&parser::Node> for GameNode { } } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub struct MoveNode { id: Uuid, color: Color, @@ -426,7 +427,7 @@ impl TryFrom<&parser::Node> for MoveNode { } } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub struct SetupNode { id: Uuid, diff --git a/sgf/src/parser.rs b/sgf/src/parser.rs index ce128a1..e60007f 100644 --- a/sgf/src/parser.rs +++ b/sgf/src/parser.rs @@ -9,6 +9,7 @@ use nom::{ multi::{many0, many1, separated_list1}, IResult, Parser, }; +use serde::{Deserialize, Serialize}; use std::{num::ParseIntError, time::Duration}; impl From for Error { @@ -29,7 +30,7 @@ impl From for ParseSizeError { } } -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Deserialize, Serialize)] pub enum Annotation { BadMove, DoubtfulMove, @@ -37,7 +38,7 @@ pub enum Annotation { Tesuji, } -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Deserialize, Serialize)] pub enum Evaluation { Even, GoodForBlack, @@ -147,7 +148,7 @@ impl ToString for GameType { } } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub struct Size { pub width: i32, pub height: i32, @@ -200,7 +201,7 @@ pub struct Node { pub next: Vec, } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub enum SetupInstr { Piece((Color, String)), Clear(String), @@ -288,7 +289,7 @@ impl ToString for Node { } } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub enum Move { Move(String), Pass, diff --git a/sgf/src/types.rs b/sgf/src/types.rs index 9b52030..3cf3d13 100644 --- a/sgf/src/types.rs +++ b/sgf/src/types.rs @@ -3,7 +3,7 @@ use thiserror::Error; use serde::{Deserialize, Serialize}; use std::fmt; -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub enum GameType { Go, Othello, @@ -96,7 +96,7 @@ impl From> for ParseError { } } -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] pub enum Color { Black, White,