diff --git a/flake.nix b/flake.nix index 936e777..297d215 100644 --- a/flake.nix +++ b/flake.nix @@ -78,7 +78,7 @@ # Env vars # a nightly compiler is required unless we use this cheat code. - RUSTC_BOOTSTRAP = 0; + RUSTC_BOOTSTRAP = 1; # CFG_RELEASE = "${rustPlatform.rust.rustc.version}-stable"; CFG_RELEASE_CHANNEL = "stable"; @@ -104,6 +104,8 @@ PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig"; RUST_BACKTRACE = "full"; LD_LIBRARY_PATH = lib.makeLibraryPath buildInputs; + RUSTC_BOOTSTRAP = 1; + CFG_RELEASE_CHANNEL = "stable"; }; } ); diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 2a19081..92e3f22 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -6,5 +6,6 @@ components = [ "rustfmt", "clippy", "rust-analyzer", + "rust-src" ] profile = "minimal" diff --git a/src/config/code.rs b/src/config/code.rs index b842657..48e8105 100644 --- a/src/config/code.rs +++ b/src/config/code.rs @@ -1,12 +1,29 @@ //! Code in config use serde::{Deserialize, Serialize}; +const PICK_DEFAULT: &str = "${fid}.${slug}"; fn default_pick() -> String { - "${fid}.${slug}".into() + PICK_DEFAULT.into() } +const SUBMISSION_DEFAULT: &str = "${fid}.${slug}.${sid}.${ac}"; fn default_submission() -> String { - "${fid}.${slug}.${sid}.${ac}".into() + SUBMISSION_DEFAULT.into() +} + +fn is_default_pick(t: &String) -> bool { + t == PICK_DEFAULT +} + +fn is_default_submission(t: &String) -> bool { + t == SUBMISSION_DEFAULT +} + +fn is_default_string(t: &String) -> bool { + t.is_empty() +} +fn is_default_bool(t: &bool) -> bool { + !t } /// Code config @@ -18,26 +35,29 @@ pub struct Code { pub editor_args: Option>, #[serde(rename(serialize = "editor-envs"), alias = "editor-envs", default)] pub editor_envs: Option>, - #[serde(default, skip_serializing)] + #[serde(default, skip_serializing_if = "is_default_bool")] pub edit_code_marker: bool, - #[serde(default, skip_serializing)] + #[serde(default, skip_serializing_if = "is_default_string")] pub start_marker: String, - #[serde(default, skip_serializing)] + #[serde(default, skip_serializing_if = "is_default_string")] pub end_marker: String, #[serde(rename(serialize = "inject_before"), alias = "inject_before", default)] pub inject_before: Option>, #[serde(rename(serialize = "inject_after"), alias = "inject_after", default)] pub inject_after: Option>, - #[serde(default, skip_serializing)] + #[serde(default, skip_serializing_if = "is_default_bool")] pub comment_problem_desc: bool, - #[serde(default, skip_serializing)] + #[serde(default, skip_serializing_if = "is_default_string")] pub comment_leading: String, - #[serde(default, skip_serializing)] + #[serde(default, skip_serializing_if = "is_default_bool")] pub test: bool, pub lang: String, - #[serde(default = "default_pick", skip_serializing)] + #[serde(default = "default_pick", skip_serializing_if = "is_default_pick")] pub pick: String, - #[serde(default = "default_submission", skip_serializing)] + #[serde( + default = "default_submission", + skip_serializing_if = "is_default_submission" + )] pub submission: String, }