Some checks failed
Update All Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Triage Project Sync (#84) / Sync triage project (push) Has been cancelled
release_nightly / notify_on_failure (push) Has been cancelled
release_nightly / check_style (push) Has been cancelled
release_nightly / run_tests_windows (push) Has been cancelled
release_nightly / clippy_windows (push) Has been cancelled
release_nightly / bundle_linux_aarch64 (push) Has been cancelled
release_nightly / bundle_linux_x86_64 (push) Has been cancelled
release_nightly / bundle_mac_aarch64 (push) Has been cancelled
release_nightly / bundle_mac_x86_64 (push) Has been cancelled
release_nightly / bundle_windows_aarch64 (push) Has been cancelled
release_nightly / bundle_windows_x86_64 (push) Has been cancelled
release_nightly / build_nix_linux_x86_64 (push) Has been cancelled
release_nightly / build_nix_mac_aarch64 (push) Has been cancelled
release_nightly / update_nightly_tag (push) Has been cancelled
Hotfix Review Monitor / check-hotfix-reviews (push) Has been cancelled
Stale PR Review Reminder / check-stale-prs (push) Has been cancelled
Update Weekly Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Bump collab-staging Tag / update-collab-staging-tag (push) Has been cancelled
compliance_check / scheduled_compliance_check (push) Has been cancelled
Single-commit orphan branch: full zed-industries/zed @ 8c74db0 source tree with a 3-file patch applied (no upstream history). Patch (crates/gpui_linux/src/linux/wayland/): - serial.rs: add SerialKind::KeyboardEnter - client.rs: store wl_keyboard.enter serial; add latest_serial_of() - window.rs: activate() uses keyboard-enter serial (Mutter focus gate) Mutter honors window activation only when the token carries the keyboard- focus serial from wl_keyboard.enter; GPUI used a stale mouse-press serial. See docs/tray-window-focus-wayland.md in logiguard. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
73 lines
3.0 KiB
Rust
73 lines
3.0 KiB
Rust
use schemars::{JsonSchema, transform::transform_subschemas};
|
|
|
|
const DEFS_PATH: &str = "#/$defs/";
|
|
|
|
/// Replaces the JSON schema definition for some type if it is in use (in the definitions list), and
|
|
/// returns a reference to it.
|
|
///
|
|
/// This asserts that JsonSchema::schema_name() + "2" does not exist because this indicates that
|
|
/// there are multiple types that use this name, and unfortunately schemars APIs do not support
|
|
/// resolving this ambiguity - see <https://github.com/GREsau/schemars/issues/449>
|
|
///
|
|
/// This takes a closure for `schema` because some settings types are not available on the remote
|
|
/// server, and so will crash when attempting to access e.g. GlobalThemeRegistry.
|
|
pub fn replace_subschema<T: JsonSchema>(
|
|
generator: &mut schemars::SchemaGenerator,
|
|
schema: impl Fn() -> schemars::Schema,
|
|
) -> schemars::Schema {
|
|
let schema_name = T::schema_name();
|
|
let definitions = generator.definitions_mut();
|
|
assert!(!definitions.contains_key(&format!("{schema_name}2")));
|
|
assert!(definitions.contains_key(schema_name.as_ref()));
|
|
definitions.insert(schema_name.to_string(), schema().to_value());
|
|
schemars::Schema::new_ref(format!("{DEFS_PATH}{schema_name}"))
|
|
}
|
|
|
|
/// Adds a new JSON schema definition and returns a reference to it. **Panics** if the name is
|
|
/// already in use.
|
|
pub fn add_new_subschema(
|
|
generator: &mut schemars::SchemaGenerator,
|
|
name: &str,
|
|
schema: serde_json::Value,
|
|
) -> schemars::Schema {
|
|
let old_definition = generator.definitions_mut().insert(name.to_string(), schema);
|
|
assert_eq!(old_definition, None);
|
|
schemars::Schema::new_ref(format!("{DEFS_PATH}{name}"))
|
|
}
|
|
|
|
/// Defaults `additionalProperties` to `true`, as if `#[schemars(deny_unknown_fields)]` was on every
|
|
/// struct. Skips structs that have `additionalProperties` set (such as if #[serde(flatten)] is used
|
|
/// on a map).
|
|
#[derive(Clone)]
|
|
pub struct DefaultDenyUnknownFields;
|
|
|
|
impl schemars::transform::Transform for DefaultDenyUnknownFields {
|
|
fn transform(&mut self, schema: &mut schemars::Schema) {
|
|
if let Some(object) = schema.as_object_mut()
|
|
&& object.contains_key("properties")
|
|
&& !object.contains_key("additionalProperties")
|
|
&& !object.contains_key("unevaluatedProperties")
|
|
{
|
|
object.insert("additionalProperties".to_string(), false.into());
|
|
}
|
|
transform_subschemas(self, schema);
|
|
}
|
|
}
|
|
|
|
/// Defaults `allowTrailingCommas` to `true`, for use with `json-language-server`.
|
|
/// This can be applied to any schema that will be treated as `jsonc`.
|
|
///
|
|
/// Note that this is non-recursive and only applied to the root schema.
|
|
#[derive(Clone)]
|
|
pub struct AllowTrailingCommas;
|
|
|
|
impl schemars::transform::Transform for AllowTrailingCommas {
|
|
fn transform(&mut self, schema: &mut schemars::Schema) {
|
|
if let Some(object) = schema.as_object_mut()
|
|
&& !object.contains_key("allowTrailingCommas")
|
|
{
|
|
object.insert("allowTrailingCommas".to_string(), true.into());
|
|
}
|
|
}
|
|
}
|