Skip to main content

wslplugins_rs/
lib.rs

1// Enable doc_cfg if docrs
2#![cfg_attr(docsrs, feature(doc_cfg))]
3
4//! # WSLPlugin-rs
5//!
6//! This is the main entry point for the **WSLPlugin-rs** crate, a framework designed for creating
7//! plugins for the **Windows Subsystem for Linux (WSL)** using idiomatic Rust.
8//!
9//! ## Overview
10//!
11//! WSLPlugin-rs simplifies the development of [WSL plugins](https://learn.microsoft.com/windows/wsl/wsl-plugins?utm_source=chatgpt.com) by providing higher-level abstractions
12//! built on top of the raw APIs. This crate exports useful modules and types for plugin creation,
13//! such as session management, VM handling, and distribution operations.
14//!
15//! ## Usage
16//!
17//! Use the exposed modules and types to build custom WSL plugins. Conditional features like `macro`
18//! enable procedural macros for simplifying the plugin development process.
19//!
20//! ### Example
21//!
22//! ```rust
23//! #[cfg(feature = "macro")]
24//! use wslplugins_rs::prelude::*;
25//! pub(crate) struct MyPlugin {
26//!   context: &'static WSLContext,
27//! }
28//! #[wsl_plugin_v1(2, 0, 5)]
29//! impl WSLPluginV1 for MyPlugin {
30//!     fn try_new(context: &'static WSLContext) -> WinResult<Self> {
31//!         Ok(MyPlugin { context })
32//!     }
33//! }
34//! ```
35
36/// Provides interfaces for interacting with WSL plugin APIs.
37pub mod api;
38
39// Internal modules for managing specific WSL features.
40mod core_distribution_information;
41pub(crate) mod cstring_ext;
42mod session_id;
43pub mod user_distribution_id;
44pub use windows_core;
45#[doc(hidden)]
46#[cfg(feature = "macro")]
47pub mod __private;
48pub mod distribution_id;
49mod distribution_information;
50mod offline_distribution_information;
51mod utils;
52mod wsl_context;
53mod wsl_session_information;
54mod wsl_vm_creation_settings;
55#[cfg(doc)]
56use crate::plugin::WSLPluginV1;
57pub mod wsl_user_configuration;
58pub use typed_path;
59pub use wsl_user_configuration::WSLUserConfiguration;
60/// Tools and utilities for creating custom WSL plugins.
61pub mod plugin;
62/// Convenient re-exports for common plugin development imports.
63pub mod prelude;
64
65// Re-exports for core structures to simplify usage.
66pub use core_distribution_information::CoreDistributionInformation;
67pub use distribution_id::DistributionID;
68pub use distribution_information::DistributionInformation;
69pub use offline_distribution_information::OfflineDistributionInformation;
70pub use wsl_context::WSLContext;
71pub use wsl_session_information::WSLSessionInformation;
72pub use wsl_vm_creation_settings::WSLVmCreationSettings;
73mod wsl_version;
74pub use api::WSLCommandExecution;
75pub use wsl_version::WSLVersion;
76
77/// Re-exports procedural macros when the `macro` feature is enabled.
78/// It allow to mark a plugin struct (that implement [`WSLPluginV1`] trait) to be easely integrated to the WSL plugin system without writing manually C code for entry point or hooks.
79#[cfg(feature = "macro")]
80pub use wslplugins_macro::wsl_plugin_v1;
81
82/// Re-exports the `wslpluginapi_sys` crate as `sys` when the `sys` feature is enabled.
83#[cfg(feature = "sys")]
84pub use wslpluginapi_sys as sys;
85
86pub use session_id::SessionID;
87pub use user_distribution_id::UserDistributionID;