Skip to main content

cubing_core/
experimental_twizzle_link.rs

1use url::Url;
2
3use crate::alg::Alg;
4
5#[derive(Default)]
6pub enum ExperimentalSetupAnchor {
7    #[default]
8    Start,
9    End,
10}
11
12#[derive(Default)]
13pub struct ExperimentalTwizzleLinkParameters<'a> {
14    pub setup: Option<&'a Alg>,
15    pub alg: Option<&'a Alg>,
16    pub puzzle: Option<&'a str>,
17    pub stickering: Option<&'a str>,
18    pub setup_anchor: Option<&'a str>,
19}
20
21pub fn experimental_twizzle_link(parameters: ExperimentalTwizzleLinkParameters) -> String {
22    let mut url = Url::parse("https://alpha.twizzle.net/edit/").unwrap();
23    if let Some(setup) = parameters.setup {
24        url.query_pairs_mut()
25            .append_pair("setup-alg", &setup.to_string());
26    }
27    if let Some(alg) = parameters.alg {
28        url.query_pairs_mut().append_pair("alg", &alg.to_string());
29    }
30    if let Some(puzzle) = parameters.puzzle {
31        url.query_pairs_mut().append_pair("puzzle", puzzle);
32    }
33    if let Some(setup_anchor) = parameters.setup_anchor {
34        url.query_pairs_mut()
35            .append_pair("setup_anchor", setup_anchor);
36    }
37    if let Some(stickering) = parameters.stickering {
38        url.query_pairs_mut().append_pair("stickering", stickering);
39    }
40    url.to_string()
41}