uni_components 0.0.9

The basical components like Service and UiPage for uniui_* crate family
Documentation
use crate::CallError;

use super::super::UiPage;

pub fn open<T>(page: &dyn UiPage<Data = T>) -> Result<(), CallError>
where
	T: 'static + serde::de::DeserializeOwned + serde::Serialize,
{
	crate::net::open(page.path())?;
	return Ok(());
}

pub fn open_with_data<T>(
	page: &dyn UiPage<Data = T>,
	data: &T,
) -> Result<(), CallError>
where
	T: 'static + serde::de::DeserializeOwned + serde::Serialize,
{
	let path = crate::to_path(page.path(), data)?;
	crate::net::open(&path)?;
	return Ok(());
}

pub fn get_launch_parameter<T>(_page: &dyn UiPage<Data = T>) -> Result<T, CallError>
where
	T: 'static + serde::de::DeserializeOwned + serde::Serialize,
{
	let s = web_sys::window().unwrap().location().search().unwrap();
	return match s.len() {
		0 | 1 => Err(CallError::IncorrectInput),
		_ => {
			let data = serde_urlencoded::from_str(&s[1..])?;
			Ok(data)
		},
	};
}

pub fn system_depend_path<T>(page: &dyn UiPage<Data = T>) -> String
where
	T: 'static + serde::de::DeserializeOwned + serde::Serialize,
{
	return page.path().to_owned();
}

pub fn encode_data<T>(data: &T) -> Result<String, CallError>
where
	T: 'static + serde::de::DeserializeOwned + serde::Serialize,
{
	let query_params = serde_urlencoded::to_string(data)?;
	return Ok(query_params);
}

pub fn extract_launch_parameter<T>(s: &str) -> Result<T, CallError>
where
	T: 'static + serde::de::DeserializeOwned + serde::Serialize,
{
	let data = serde_urlencoded::from_str(s)?;
	return Ok(data);
}