diff --git a/Cargo.lock b/Cargo.lock index f068f357..7b1fef50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,6 +23,7 @@ name = "accesskit" version = "0.11.2" dependencies = [ "enumn", + "pyo3", "schemars", "serde", ] @@ -756,6 +757,12 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "indoc" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" + [[package]] name = "instant" version = "0.1.12" @@ -837,6 +844,16 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +[[package]] +name = "lock_api" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.17" @@ -879,6 +896,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1084,6 +1110,29 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.3.5", + "smallvec", + "windows-targets 0.48.1", +] + [[package]] name = "paste" version = "1.0.12" @@ -1167,6 +1216,66 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pyo3" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e681a6cfdc4adcc93b4d3cf993749a4552018ee0a9b65fc0ccfad74352c72a38" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset 0.9.0", + "parking_lot", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "076c73d0bc438f7a4ef6fdd0c3bb4732149136abd952b110ac93e4edb13a6ba5" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53cee42e77ebe256066ba8aa77eff722b3bb91f3419177cf4cd0f304d3284d9" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfeb4c99597e136528c6dd7d5e3de5434d1ceaf487436a3f03b2d56b6fc9efd1" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "947dc12175c254889edc0c02e399476c2f652b4b9ebd123aa655c224de259536" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "quote" version = "1.0.26" @@ -1467,6 +1576,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "target-lexicon" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" + [[package]] name = "tempfile" version = "3.4.0" @@ -1619,6 +1734,12 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +[[package]] +name = "unindent" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c" + [[package]] name = "vec_map" version = "0.8.2" diff --git a/common/Cargo.toml b/common/Cargo.toml index 390d9f09..78dc401d 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -15,6 +15,7 @@ features = ["schemars", "serde"] [dependencies] enumn = { version = "0.1.6", optional = true } +pyo3 = { version = "0.19", optional = true } schemars = { version = "0.8.7", optional = true } serde = { version = "1.0", features = ["derive"], optional = true } diff --git a/common/src/lib.rs b/common/src/lib.rs index 1a36ebc9..5f677359 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -8,6 +8,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE.chromium file. +#[cfg(feature = "pyo3")] +use pyo3::pyclass; #[cfg(feature = "schemars")] use schemars::{ gen::SchemaGenerator, @@ -47,6 +49,7 @@ pub use geometry::{Affine, Point, Rect, Size, Vec2}; #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum Role { Unknown, @@ -269,6 +272,7 @@ impl Default for Role { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum Action { /// Do the default action for an object, typically this means "click". @@ -440,6 +444,7 @@ impl JsonSchema for Actions { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum Orientation { /// E.g. most toolbars and separators. @@ -453,6 +458,7 @@ pub enum Orientation { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum NameFrom { /// E.g. [`aria-label`]. @@ -478,6 +484,7 @@ pub enum NameFrom { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum DescriptionFrom { AriaDescription, @@ -497,6 +504,7 @@ pub enum DescriptionFrom { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum TextDirection { LeftToRight, @@ -514,6 +522,7 @@ pub enum TextDirection { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum Invalid { True, @@ -526,6 +535,7 @@ pub enum Invalid { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum CheckedState { False, @@ -544,6 +554,7 @@ pub enum CheckedState { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum DefaultActionVerb { Click, @@ -566,6 +577,7 @@ pub enum DefaultActionVerb { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum SortDirection { Unsorted, @@ -579,6 +591,7 @@ pub enum SortDirection { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum AriaCurrent { False, @@ -595,6 +608,7 @@ pub enum AriaCurrent { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum Live { Off, @@ -607,6 +621,7 @@ pub enum Live { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum HasPopup { True, @@ -622,6 +637,7 @@ pub enum HasPopup { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum ListStyle { Circle, @@ -638,6 +654,7 @@ pub enum ListStyle { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum TextAlign { Left, @@ -651,6 +668,7 @@ pub enum TextAlign { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum VerticalOffset { Subscript, @@ -662,6 +680,7 @@ pub enum VerticalOffset { #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "schemars", derive(JsonSchema))] #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] +#[cfg_attr(feature = "pyo3", pyclass(module = "accesskit"))] #[repr(u8)] pub enum TextDecoration { Solid,