puniyu_adapter_console 0.8.4

puniyu的控制台适配器
Documentation
use puniyu_adapter::contact::SceneType;

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ConsolePayload {
	At(String),
	Text(String),
	Image(String),
	Json(String),
	Video(String),
	Record(String),
	File(String),
	Xml(String),
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ParsedConsoleInput {
	pub scene: SceneType,
	pub payload: ConsolePayload,
}

pub fn parse_console_input(line: &str) -> ParsedConsoleInput {
	let (scene, content) = match line.split_once(':') {
		Some(("group", rest)) => (SceneType::Group, rest),
		Some(("grouptemp", rest)) => (SceneType::GroupTemp, rest),
		Some(("friend", rest)) => (SceneType::Friend, rest),
		Some(("guild", rest)) => (SceneType::Guild, rest),
		_ => (SceneType::Friend, line),
	};

	let payload = match content.split_once(':') {
		Some(("at", target_id)) if !target_id.is_empty() => {
			ConsolePayload::At(target_id.to_string())
		}
		Some(("text", text_content)) => ConsolePayload::Text(text_content.to_string()),
		Some(("image", image_url)) => ConsolePayload::Image(image_url.to_string()),
		Some(("json", json_content)) => ConsolePayload::Json(json_content.to_string()),
		Some(("video", video_url)) => ConsolePayload::Video(video_url.to_string()),
		Some(("record", record_url)) => ConsolePayload::Record(record_url.to_string()),
		Some(("file", file_url)) => ConsolePayload::File(file_url.to_string()),
		Some(("xml", xml_content)) => ConsolePayload::Xml(xml_content.to_string()),
		_ => ConsolePayload::Text(content.to_string()),
	};

	ParsedConsoleInput { scene, payload }
}