Base of server list
This commit is contained in:
parent
63731ca450
commit
1920e9e9e2
|
@ -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),
|
||||||
|
|
Loading…
Reference in New Issue