simplify tidepool moves output json
This commit is contained in:
parent
1c8af44523
commit
2219e96f48
|
@ -120,9 +120,7 @@ fn simulation(
|
||||||
pieces += 1;
|
pieces += 1;
|
||||||
|
|
||||||
if let Some(moves) = moves.as_mut() {
|
if let Some(moves) = moves.as_mut() {
|
||||||
moves.push(output::Move {
|
moves.push(output::Move { placement })
|
||||||
location: placement.into(),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use mino::srs::PieceType;
|
use mino::srs::Piece;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
|
@ -19,42 +19,9 @@ pub struct Output {
|
||||||
|
|
||||||
#[derive(Serialize, Debug)]
|
#[derive(Serialize, Debug)]
|
||||||
pub struct Move {
|
pub struct Move {
|
||||||
pub location: Location,
|
#[serde(flatten, serialize_with = "ser::placement")]
|
||||||
// TODO: garbage added
|
pub placement: Piece,
|
||||||
}
|
// TODO: spin?
|
||||||
|
|
||||||
#[derive(Serialize, Debug)]
|
|
||||||
pub struct Location {
|
|
||||||
#[serde(rename = "type", serialize_with = "ser::piece_type")]
|
|
||||||
pub ty: PieceType,
|
|
||||||
pub x: i16,
|
|
||||||
pub y: i16,
|
|
||||||
pub orientation: Orientation,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Debug)]
|
|
||||||
#[serde(rename_all = "lowercase")]
|
|
||||||
pub enum Orientation {
|
|
||||||
North,
|
|
||||||
East,
|
|
||||||
South,
|
|
||||||
West,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<mino::srs::Piece> for Location {
|
|
||||||
fn from(pc: mino::srs::Piece) -> Self {
|
|
||||||
Self {
|
|
||||||
ty: pc.ty,
|
|
||||||
x: pc.loc.x,
|
|
||||||
y: pc.loc.y,
|
|
||||||
orientation: match pc.loc.r {
|
|
||||||
mino::Rot::N => Orientation::North,
|
|
||||||
mino::Rot::E => Orientation::East,
|
|
||||||
mino::Rot::S => Orientation::South,
|
|
||||||
mino::Rot::W => Orientation::West,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Debug)]
|
#[derive(Serialize, Debug)]
|
||||||
|
@ -78,11 +45,40 @@ mod ser {
|
||||||
seed.to_string().serialize(serializer)
|
seed.to_string().serialize(serializer)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn piece_type<S>(ty: &PieceType, serializer: S) -> Result<S::Ok, S::Error>
|
pub fn placement<S>(pc: &Piece, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
where
|
where
|
||||||
S: serde::Serializer,
|
S: serde::Serializer,
|
||||||
{
|
{
|
||||||
ty.name().serialize(serializer)
|
#[derive(Serialize)]
|
||||||
|
struct Placement {
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
ty: char,
|
||||||
|
x: i16,
|
||||||
|
y: i16,
|
||||||
|
orientation: Orientation,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
#[serde(rename_all = "lowercase")]
|
||||||
|
enum Orientation {
|
||||||
|
North,
|
||||||
|
East,
|
||||||
|
South,
|
||||||
|
West,
|
||||||
|
}
|
||||||
|
|
||||||
|
Placement {
|
||||||
|
ty: pc.ty.as_char(),
|
||||||
|
x: pc.loc.x,
|
||||||
|
y: pc.loc.y,
|
||||||
|
orientation: match pc.loc.r {
|
||||||
|
mino::Rot::N => Orientation::North,
|
||||||
|
mino::Rot::E => Orientation::East,
|
||||||
|
mino::Rot::S => Orientation::South,
|
||||||
|
mino::Rot::W => Orientation::West,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
.serialize(serializer)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn seconds<S>(dur: &Duration, serializer: S) -> Result<S::Ok, S::Error>
|
pub fn seconds<S>(dur: &Duration, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
|
Loading…
Reference in New Issue