Skip to content

Instantly share code, notes, and snippets.

@Krysztal112233
Created June 25, 2023 03:46
Show Gist options
  • Save Krysztal112233/6e1c9d90f193e44ce725bc39c914426c to your computer and use it in GitHub Desktop.
Save Krysztal112233/6e1c9d90f193e44ce725bc39c914426c to your computer and use it in GitHub Desktop.
use std::rc::Rc;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(untagged)]
pub enum TinyType {
Class {
obf_name: String,
intermediary_name: String,
},
Field {
class: String,
type_desc: String,
obf_name: String,
intermediary_name: String,
},
Method {
class: String,
return_desc: String,
obf_name: String,
intermediary_name: String,
},
None,
}
impl TinyType {
pub fn new<T: Into<String>>(line: T) -> Option<TinyType> {
let line: String = line.into();
let elements = line
.split("\t")
.into_iter()
.map(|e| String::from(e))
.collect::<Vec<_>>();
let tiny_type = Rc::new(elements.get(0).unwrap().as_str());
match *tiny_type {
"CLASS" => Some(TinyType::Class {
obf_name: elements.get(1)?.to_string(),
intermediary_name: elements.get(2)?.to_string(),
}),
"FIELD" => Some(TinyType::Field {
class: elements.get(1)?.to_string(),
type_desc: elements.get(2)?.to_string(),
obf_name: elements.get(3)?.to_string(),
intermediary_name: elements.get(4)?.to_string(),
}),
"METHOD" => Some(TinyType::Method {
class: elements.get(1)?.to_string(),
return_desc: elements.get(2)?.to_string(),
obf_name: elements.get(3)?.to_string(),
intermediary_name: elements.get(4)?.to_string(),
}),
_ => Some(TinyType::None),
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment