///|
/// This object represents a unique message identifier.
pub struct MessageId {
  message_id : Int
} derive(Show, Eq)

///|
/// Creates a new [MessageId].
pub fn MessageId::new(message_id~ : Int) -> MessageId {
  { message_id, }
}

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

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