Base of server list

This commit is contained in:
Thinkofdeath 2015-09-23 20:16:25 +01:00
parent 63731ca450
commit 1920e9e9e2
1 changed files with 56 additions and 47 deletions

View File

@ -15,26 +15,27 @@
use serde_json; use serde_json;
use std::fmt; use std::fmt;
#[derive(Debug)] #[derive(Debug, Clone)]
pub enum Component { pub enum Component {
Text(TextComponent) Text(TextComponent)
} }
impl Component { impl Component {
pub fn from_value(v: &serde_json::Value) -> Self { pub fn from_value(v: &serde_json::Value) -> Self {
let modifier = Modifier::from_value(v); let mut modifier = Modifier::from_value(v);
if let Some(val) = v.as_string() { if let Some(val) = v.as_string() {
Component::Text(TextComponent{text: val.to_owned(), modifier: modifier}) Component::Text(TextComponent{text: val.to_owned(), modifier: modifier})
} else if v.find("text").is_some(){ } else if v.find("text").is_some(){
Component::Text(TextComponent::from_value(v, modifier)) Component::Text(TextComponent::from_value(v, modifier))
} else { } else {
Component::Text(TextComponent{text: "".to_owned(), modifier: modifier}) modifier.color = Some(Color::RGB(255, 0, 0));
} Component::Text(TextComponent{text: "UNHANDLED".to_owned(), modifier: modifier})
} }
}
pub fn to_value(&self) -> serde_json::Value { pub fn to_value(&self) -> serde_json::Value {
unimplemented!() unimplemented!()
} }
} }
impl fmt::Display for Component { impl fmt::Display for Component {
@ -51,7 +52,7 @@ impl Default for Component {
} }
} }
#[derive(Debug, Default)] #[derive(Debug, Default, Clone)]
pub struct Modifier { pub struct Modifier {
pub extra: Option<Vec<Component>>, pub extra: Option<Vec<Component>>,
pub bold: Option<bool>, pub bold: Option<bool>,
@ -67,50 +68,59 @@ pub struct Modifier {
} }
impl Modifier { impl Modifier {
pub fn from_value(v: &serde_json::Value) -> Self { pub fn from_value(v: &serde_json::Value) -> Self {
let mut m = Modifier { let mut m = Modifier {
bold: v.find("bold").map_or(Option::None, |v| v.as_boolean()), bold: v.find("bold").map_or(Option::None, |v| v.as_boolean()),
italic: v.find("italic").map_or(Option::None, |v| v.as_boolean()), italic: v.find("italic").map_or(Option::None, |v| v.as_boolean()),
underlined: v.find("underlined").map_or(Option::None, |v| v.as_boolean()), underlined: v.find("underlined").map_or(Option::None, |v| v.as_boolean()),
strikethrough: v.find("strikethrough").map_or(Option::None, |v| v.as_boolean()), strikethrough: v.find("strikethrough").map_or(Option::None, |v| v.as_boolean()),
obfuscated: v.find("obfuscated").map_or(Option::None, |v| v.as_boolean()), obfuscated: v.find("obfuscated").map_or(Option::None, |v| v.as_boolean()),
color: v.find("color").map_or(Option::None, |v| v.as_string()).map(|v| Color::from_string(&v.to_owned())), color: v.find("color").map_or(Option::None, |v| v.as_string()).map(|v| Color::from_string(&v.to_owned())),
extra: Option::None, extra: Option::None,
}; };
if let Some(extra) = v.find("extra") { if let Some(extra) = v.find("extra") {
if let Some(data) = extra.as_array() { if let Some(data) = extra.as_array() {
let mut ex = Vec::new(); let mut ex = Vec::new();
for e in data { for e in data {
ex.push(Component::from_value(e)); ex.push(Component::from_value(e));
}
m.extra = Some(ex);
} }
m.extra = Some(ex);
} }
m
} }
m
}
pub fn to_value(&self) -> serde_json::Value { pub fn to_value(&self) -> serde_json::Value {
unimplemented!() unimplemented!()
} }
} }
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct TextComponent { pub struct TextComponent {
pub text: String, pub text: String,
pub modifier: Modifier, pub modifier: Modifier,
} }
impl TextComponent { impl TextComponent {
pub fn from_value(v: &serde_json::Value, modifier: Modifier) -> Self { pub fn new(val: &str) -> TextComponent {
TextComponent { TextComponent {
text: v.find("text").unwrap().as_string().unwrap_or("").to_owned(), text: val.to_owned(),
modifier: modifier, modifier: Modifier {
.. Default::default()
} }
} }
}
pub fn to_value(&self) -> serde_json::Value { pub fn from_value(v: &serde_json::Value, modifier: Modifier) -> Self {
unimplemented!() TextComponent {
text: v.find("text").unwrap().as_string().unwrap_or("").to_owned(),
modifier: modifier,
} }
}
pub fn to_value(&self) -> serde_json::Value {
unimplemented!()
}
} }
impl fmt::Display for TextComponent { impl fmt::Display for TextComponent {
@ -125,7 +135,7 @@ impl fmt::Display for TextComponent {
} }
} }
#[derive(Debug)] #[derive(Debug, Clone, Copy)]
pub enum Color { pub enum Color {
Black, Black,
DarkBlue, DarkBlue,
@ -194,7 +204,7 @@ impl Color {
} }
} }
fn to_string(&self) -> String { pub fn to_string(&self) -> String {
match *self { match *self {
Color::Black => "black".to_owned(), Color::Black => "black".to_owned(),
Color::DarkBlue => "dark_blue".to_owned(), Color::DarkBlue => "dark_blue".to_owned(),
@ -216,8 +226,7 @@ impl Color {
} }
} }
#[allow(dead_code)] pub fn to_rgb(&self) -> (u8, u8, u8) {
fn to_rgb(&self) -> (u8, u8, u8) {
match *self { match *self {
Color::Black =>(0, 0, 0), Color::Black =>(0, 0, 0),
Color::DarkBlue =>(0, 0, 170), Color::DarkBlue =>(0, 0, 170),