///|
/// Represents a story.
pub struct Story {
  chat : Chat
  id : Int
} derive(Show, Eq)

///|
/// Creates a new [Story].
pub fn Story::new(chat~ : Chat, id~ : Int) -> Story {
  { chat, id }
}

///|
pub impl ToJson for Story with to_json(self) {
  let object : Map[String, Json] = {
    "chat": self.chat.to_json(),
    "id": self.id.to_json(),
  }
  object.to_json()
}

///|
pub impl @json.FromJson for Story with from_json(json, path) {
  guard json is Object(object) else {
    raise @json.JsonDecodeError((path, "Expected object for Story"))
  }
  let chat : Chat = @json.from_json(object["chat"], path~)
  let id : Int = @json.from_json(object["id"], path~)
  { chat, id }
}