#![allow(unused_variables)]
#[cfg(target_arch = "wasm32")]
use sapp_jsutils::{JsObject, JsObjectWeak};
#[no_mangle]
#[cfg(target_arch = "wasm32")]
extern "C" fn quad_url_crate_version() -> u32 {
let major = env!("CARGO_PKG_VERSION_MAJOR").parse::<u32>().unwrap();
let minor = env!("CARGO_PKG_VERSION_MINOR").parse::<u32>().unwrap();
let patch = env!("CARGO_PKG_VERSION_PATCH").parse::<u32>().unwrap();
(major << 24) + (minor << 16) + patch
}
#[cfg(target_arch = "wasm32")]
extern "C" {
fn quad_url_path(full: u32) -> JsObject;
fn quad_url_param_count() -> i32;
fn quad_url_get_key(pos: i32) -> JsObject;
fn quad_url_get_value(pos: i32) -> JsObject;
fn quad_url_delete_program_parameter(name: JsObjectWeak);
fn quad_url_set_program_parameter(name: JsObjectWeak, value: JsObjectWeak);
fn quad_url_get_hash() -> JsObject;
fn quad_url_set_hash(value: JsObjectWeak);
fn quad_url_link_open(url: JsObjectWeak, new_tab: u32);
}
pub fn get_program_parameters() -> Vec<String> {
#[cfg(target_arch = "wasm32")]
{
let count = unsafe { quad_url_param_count() };
let mut path = String::new();
unsafe {
quad_url_path(0).to_string(&mut path);
}
let mut result = vec![path];
for i in 0..count {
let mut key = String::new();
unsafe {
quad_url_get_key(i).to_string(&mut key);
}
let mut value = String::new();
unsafe {
quad_url_get_value(i).to_string(&mut value);
}
let dash = if key.chars().count() == 1 { "-" } else { "--" };
if value == "" {
result.push(format!("{}{}", dash, key));
} else {
result.push(format!("{}{}={}", dash, key, &value));
}
}
result
}
#[cfg(not(target_arch = "wasm32"))]
{
std::env::args().collect()
}
}
pub fn path(full: bool) -> String {
#[cfg(target_arch = "wasm32")]
{
let mut path = String::new();
unsafe {
quad_url_path(full as u32).to_string(&mut path);
}
path
}
#[cfg(not(target_arch = "wasm32"))]
{
if full {
std::env::args().collect::<Vec<_>>().join(" ")
} else {
std::env::args().next().unwrap()
}
}
}
pub fn easy_parse(param: &str) -> Option<(&str, Option<&str>)> {
let skip_len = if param.starts_with("--") {
"--".len()
} else if param.starts_with('-') {
"-".len()
} else {
return None;
};
if let Some(pos) = param.chars().position(|x| x == '=') {
let name = ¶m[skip_len..pos];
let value = ¶m[pos + '='.len_utf8()..];
if value.is_empty() {
Some((name, None))
} else {
Some((name, Some(value)))
}
} else {
Some((¶m[skip_len..], None))
}
}
pub fn delete_program_parameter(name: &str) {
#[cfg(target_arch = "wasm32")]
{
let name = JsObject::string(name);
unsafe {
quad_url_delete_program_parameter(name.weak());
}
drop(name);
}
}
pub fn set_program_parameter(name: &str, value: &str) {
#[cfg(target_arch = "wasm32")]
{
let name = JsObject::string(name);
let value = JsObject::string(value);
unsafe {
quad_url_set_program_parameter(name.weak(), value.weak());
}
drop(name);
drop(value);
}
}
pub fn get_hash() -> String {
#[cfg(target_arch = "wasm32")]
{
let mut value = String::new();
unsafe {
quad_url_get_hash().to_string(&mut value);
}
value
}
#[cfg(not(target_arch = "wasm32"))]
{
String::new()
}
}
pub fn set_hash(value: &str) {
#[cfg(target_arch = "wasm32")]
{
let value = JsObject::string(value);
unsafe {
quad_url_set_hash(value.weak());
}
drop(value);
}
}
pub fn link_open(url: &str, new_tab: bool) {
#[cfg(target_arch = "wasm32")]
{
let url = JsObject::string(url);
unsafe {
quad_url_link_open(url.weak(), new_tab as u32);
}
drop(url);
}
#[cfg(any(
target_os = "linux",
target_os = "windows",
target_os = "macos",
target_os = "android",
))]
{
if let Err(err) = webbrowser::open(url) {
eprintln!("Failed to open url: {}, url: `{}`", err, url);
}
}
}