cubing_core/
experimental_twizzle_link.rs1use 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}