cubing_core/
experimental_twizzle_link.rs

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