osquery_rust/lib.rs
1//! With osquery-rust, we strive to make Osquery extension development a breeze. If you have ideas how
2//! to improve developer experience, reach out to us on [GitHub](https://github.com/polarlabs).
3//!
4//! If you encounter any issue with this crate, please raise an [issue](https://github.com/polarlabs/osquery-rust/issues).
5//! We are here to support you and your venture.
6//!
7//! As this is the crate's documentation, we focus here on the lib itself. However, osquery-rust is more than
8//! just the lib. Please check out the project's [README on GitHub](https://github.com/polarlabs/osquery-rust) to
9//! see the whole picture.
10//!
11//! ## Include osquery-rust in your Rust project
12//!
13//! Make sure to include osquery-rust as a dependency in your Cargo.toml. As osquery-rust is in its early
14//! stages and might evolve fast, please check for the latest version often. We adhere to semver. So you can
15//! rely on caret notation when selecting the version.
16//!
17//! ```toml
18//! [dependencies]
19//! osquery-rust = "^0.1"
20//! ```
21//!
22//! ## Get started
23//!
24//! Annotate `main` with `#[osquery_rust::args]` to import code defining the CLI
25//! of your extension.
26//!
27//! ```
28//! use osquery_rust::prelude::*;
29//!
30//! #[osquery_rust::args]
31//! fn main() -> std::io::Result<()> {
32//!
33//! // Args available due to annotation
34//! let args = Args::parse();
35//!
36//! // Have a look at the example folder for more details.
37//!
38//! Ok(())
39//! }
40//! ```
41//!
42
43#![forbid(unsafe_code)]
44
45// Restrict access to osquery API to osquery-rust
46// Users of osquery-rust are not allowed to access osquery API directly
47pub(crate) mod _osquery;
48pub(crate) mod client;
49pub mod plugin;
50pub(crate) mod server;
51pub use crate::server::Server;
52
53// Re-exports
54pub type ExtensionResponse = _osquery::osquery::ExtensionResponse;
55pub type ExtensionPluginRequest =_osquery::osquery::ExtensionPluginRequest;
56pub type ExtensionPluginResponse =_osquery::osquery::ExtensionPluginResponse;
57pub type ExtensionStatus =_osquery::osquery::ExtensionStatus;
58
59///
60/// Expose all structures required in virtually any osquery extension
61///
62/// ```
63/// use osquery_rust::prelude::*;
64/// ```
65pub mod prelude {
66 pub use crate::{ExtensionResponse, ExtensionPluginRequest, ExtensionPluginResponse, ExtensionStatus};
67 pub use crate::{Server};
68 pub use clap::{Parser};
69}
70
71// Defines a macro to import code from osquery-rust-codegen,
72// if feature "macros" is enabled.
73macro_rules! codegen_reexport {
74 ($name:ident) => {
75 #[cfg(feature = "macros")]
76 // #[doc(cfg)] is experimental
77 // #[cfg_attr(docsrs, doc(cfg(feature = "macros")))]
78 pub use osquery_rust_codegen::$name;
79 };
80}
81
82// Provide helper code from osquery-rust-codegen to define CLI of Osquery extension
83codegen_reexport!(args);