Add a picker for jj bookmark list
(#30883)
This PR adds a new picker for viewing a list of jj bookmarks, like you would with `jj bookmark list`. This is an exploration around what it would look like to begin adding some dedicated jj features to Zed. This is behind the `jj-ui` feature flag. Release Notes: - N/A
This commit is contained in:
parent
122d6c9e4d
commit
dd3956eaf1
16 changed files with 1644 additions and 152 deletions
1332
Cargo.lock
generated
1332
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -74,6 +74,8 @@ members = [
|
|||
"crates/inline_completion",
|
||||
"crates/inline_completion_button",
|
||||
"crates/install_cli",
|
||||
"crates/jj",
|
||||
"crates/jj_ui",
|
||||
"crates/journal",
|
||||
"crates/language",
|
||||
"crates/language_extension",
|
||||
|
@ -279,6 +281,8 @@ indexed_docs = { path = "crates/indexed_docs" }
|
|||
inline_completion = { path = "crates/inline_completion" }
|
||||
inline_completion_button = { path = "crates/inline_completion_button" }
|
||||
install_cli = { path = "crates/install_cli" }
|
||||
jj = { path = "crates/jj" }
|
||||
jj_ui = { path = "crates/jj_ui" }
|
||||
journal = { path = "crates/journal" }
|
||||
language = { path = "crates/language" }
|
||||
language_extension = { path = "crates/language_extension" }
|
||||
|
@ -458,6 +462,7 @@ indexmap = { version = "2.7.0", features = ["serde"] }
|
|||
indoc = "2"
|
||||
inventory = "0.3.19"
|
||||
itertools = "0.14.0"
|
||||
jj-lib = { git = "https://github.com/jj-vcs/jj", rev = "e18eb8e05efaa153fad5ef46576af145bba1807f" }
|
||||
jsonschema = "0.30.0"
|
||||
jsonwebtoken = "9.3"
|
||||
jupyter-protocol = { git = "https://github.com/ConradIrwin/runtimed", rev = "7130c804216b6914355d15d0b91ea91f6babd734" }
|
||||
|
|
|
@ -91,6 +91,12 @@ impl FeatureFlag for ThreadAutoCaptureFeatureFlag {
|
|||
}
|
||||
}
|
||||
|
||||
pub struct JjUiFeatureFlag {}
|
||||
|
||||
impl FeatureFlag for JjUiFeatureFlag {
|
||||
const NAME: &'static str = "jj-ui";
|
||||
}
|
||||
|
||||
pub trait FeatureFlagViewExt<V: 'static> {
|
||||
fn observe_flag<T: FeatureFlag, F>(&mut self, window: &Window, callback: F) -> Subscription
|
||||
where
|
||||
|
|
18
crates/jj/Cargo.toml
Normal file
18
crates/jj/Cargo.toml
Normal file
|
@ -0,0 +1,18 @@
|
|||
[package]
|
||||
name = "jj"
|
||||
version = "0.1.0"
|
||||
publish.workspace = true
|
||||
edition.workspace = true
|
||||
license = "GPL-3.0-or-later"
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
||||
[lib]
|
||||
path = "src/jj.rs"
|
||||
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
gpui.workspace = true
|
||||
jj-lib.workspace = true
|
||||
workspace-hack.workspace = true
|
1
crates/jj/LICENSE-GPL
Symbolic link
1
crates/jj/LICENSE-GPL
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../LICENSE-GPL
|
5
crates/jj/src/jj.rs
Normal file
5
crates/jj/src/jj.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
mod jj_repository;
|
||||
mod jj_store;
|
||||
|
||||
pub use jj_repository::*;
|
||||
pub use jj_store::*;
|
72
crates/jj/src/jj_repository.rs
Normal file
72
crates/jj/src/jj_repository.rs
Normal file
|
@ -0,0 +1,72 @@
|
|||
use std::path::Path;
|
||||
use std::sync::Arc;
|
||||
|
||||
use anyhow::Result;
|
||||
use gpui::SharedString;
|
||||
use jj_lib::config::StackedConfig;
|
||||
use jj_lib::repo::StoreFactories;
|
||||
use jj_lib::settings::UserSettings;
|
||||
use jj_lib::workspace::{self, DefaultWorkspaceLoaderFactory, WorkspaceLoaderFactory};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Bookmark {
|
||||
pub ref_name: SharedString,
|
||||
}
|
||||
|
||||
pub trait JujutsuRepository: Send + Sync {
|
||||
fn list_bookmarks(&self) -> Vec<Bookmark>;
|
||||
}
|
||||
|
||||
pub struct RealJujutsuRepository {
|
||||
repository: Arc<jj_lib::repo::ReadonlyRepo>,
|
||||
}
|
||||
|
||||
impl RealJujutsuRepository {
|
||||
pub fn new(cwd: &Path) -> Result<Self> {
|
||||
let workspace_loader_factory = DefaultWorkspaceLoaderFactory;
|
||||
let workspace_loader = workspace_loader_factory.create(Self::find_workspace_dir(cwd))?;
|
||||
|
||||
let config = StackedConfig::with_defaults();
|
||||
let settings = UserSettings::from_config(config)?;
|
||||
|
||||
let workspace = workspace_loader.load(
|
||||
&settings,
|
||||
&StoreFactories::default(),
|
||||
&workspace::default_working_copy_factories(),
|
||||
)?;
|
||||
|
||||
let repo_loader = workspace.repo_loader();
|
||||
let repository = repo_loader.load_at_head()?;
|
||||
|
||||
Ok(Self { repository })
|
||||
}
|
||||
|
||||
fn find_workspace_dir(cwd: &Path) -> &Path {
|
||||
cwd.ancestors()
|
||||
.find(|path| path.join(".jj").is_dir())
|
||||
.unwrap_or(cwd)
|
||||
}
|
||||
}
|
||||
|
||||
impl JujutsuRepository for RealJujutsuRepository {
|
||||
fn list_bookmarks(&self) -> Vec<Bookmark> {
|
||||
let bookmarks = self
|
||||
.repository
|
||||
.view()
|
||||
.bookmarks()
|
||||
.map(|(ref_name, _target)| Bookmark {
|
||||
ref_name: ref_name.as_str().to_string().into(),
|
||||
})
|
||||
.collect();
|
||||
|
||||
bookmarks
|
||||
}
|
||||
}
|
||||
|
||||
pub struct FakeJujutsuRepository {}
|
||||
|
||||
impl JujutsuRepository for FakeJujutsuRepository {
|
||||
fn list_bookmarks(&self) -> Vec<Bookmark> {
|
||||
Vec::new()
|
||||
}
|
||||
}
|
41
crates/jj/src/jj_store.rs
Normal file
41
crates/jj/src/jj_store.rs
Normal file
|
@ -0,0 +1,41 @@
|
|||
use std::path::Path;
|
||||
use std::sync::Arc;
|
||||
|
||||
use gpui::{App, Entity, Global, prelude::*};
|
||||
|
||||
use crate::{JujutsuRepository, RealJujutsuRepository};
|
||||
|
||||
/// Note: We won't ultimately be storing the jj store in a global, we're just doing this for exploration purposes.
|
||||
struct GlobalJujutsuStore(Entity<JujutsuStore>);
|
||||
|
||||
impl Global for GlobalJujutsuStore {}
|
||||
|
||||
pub struct JujutsuStore {
|
||||
repository: Arc<dyn JujutsuRepository>,
|
||||
}
|
||||
|
||||
impl JujutsuStore {
|
||||
pub fn init_global(cx: &mut App) {
|
||||
let Some(repository) = RealJujutsuRepository::new(&Path::new(".")).ok() else {
|
||||
return;
|
||||
};
|
||||
|
||||
let repository = Arc::new(repository);
|
||||
let jj_store = cx.new(|cx| JujutsuStore::new(repository, cx));
|
||||
|
||||
cx.set_global(GlobalJujutsuStore(jj_store));
|
||||
}
|
||||
|
||||
pub fn try_global(cx: &App) -> Option<Entity<Self>> {
|
||||
cx.try_global::<GlobalJujutsuStore>()
|
||||
.map(|global| global.0.clone())
|
||||
}
|
||||
|
||||
pub fn new(repository: Arc<dyn JujutsuRepository>, _cx: &mut Context<Self>) -> Self {
|
||||
Self { repository }
|
||||
}
|
||||
|
||||
pub fn repository(&self) -> &Arc<dyn JujutsuRepository> {
|
||||
&self.repository
|
||||
}
|
||||
}
|
25
crates/jj_ui/Cargo.toml
Normal file
25
crates/jj_ui/Cargo.toml
Normal file
|
@ -0,0 +1,25 @@
|
|||
[package]
|
||||
name = "jj_ui"
|
||||
version = "0.1.0"
|
||||
publish.workspace = true
|
||||
edition.workspace = true
|
||||
license = "GPL-3.0-or-later"
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
||||
[lib]
|
||||
path = "src/jj_ui.rs"
|
||||
|
||||
[dependencies]
|
||||
command_palette_hooks.workspace = true
|
||||
feature_flags.workspace = true
|
||||
fuzzy.workspace = true
|
||||
gpui.workspace = true
|
||||
jj.workspace = true
|
||||
picker.workspace = true
|
||||
ui.workspace = true
|
||||
util.workspace = true
|
||||
workspace-hack.workspace = true
|
||||
workspace.workspace = true
|
||||
zed_actions.workspace = true
|
1
crates/jj_ui/LICENSE-GPL
Symbolic link
1
crates/jj_ui/LICENSE-GPL
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../LICENSE-GPL
|
197
crates/jj_ui/src/bookmark_picker.rs
Normal file
197
crates/jj_ui/src/bookmark_picker.rs
Normal file
|
@ -0,0 +1,197 @@
|
|||
use std::sync::Arc;
|
||||
|
||||
use fuzzy::{StringMatchCandidate, match_strings};
|
||||
use gpui::{
|
||||
App, DismissEvent, Entity, EventEmitter, FocusHandle, Focusable, Task, WeakEntity, Window,
|
||||
prelude::*,
|
||||
};
|
||||
use jj::{Bookmark, JujutsuStore};
|
||||
use picker::{Picker, PickerDelegate};
|
||||
use ui::{HighlightedLabel, ListItem, ListItemSpacing, prelude::*};
|
||||
use util::ResultExt as _;
|
||||
use workspace::{ModalView, Workspace};
|
||||
|
||||
pub fn register(workspace: &mut Workspace) {
|
||||
workspace.register_action(open);
|
||||
}
|
||||
|
||||
fn open(
|
||||
workspace: &mut Workspace,
|
||||
_: &zed_actions::jj::BookmarkList,
|
||||
window: &mut Window,
|
||||
cx: &mut Context<Workspace>,
|
||||
) {
|
||||
let Some(jj_store) = JujutsuStore::try_global(cx) else {
|
||||
return;
|
||||
};
|
||||
|
||||
workspace.toggle_modal(window, cx, |window, cx| {
|
||||
let delegate = BookmarkPickerDelegate::new(cx.entity().downgrade(), jj_store, cx);
|
||||
BookmarkPicker::new(delegate, window, cx)
|
||||
});
|
||||
}
|
||||
|
||||
pub struct BookmarkPicker {
|
||||
picker: Entity<Picker<BookmarkPickerDelegate>>,
|
||||
}
|
||||
|
||||
impl BookmarkPicker {
|
||||
pub fn new(
|
||||
delegate: BookmarkPickerDelegate,
|
||||
window: &mut Window,
|
||||
cx: &mut Context<Self>,
|
||||
) -> Self {
|
||||
let picker = cx.new(|cx| Picker::uniform_list(delegate, window, cx));
|
||||
Self { picker }
|
||||
}
|
||||
}
|
||||
|
||||
impl ModalView for BookmarkPicker {}
|
||||
|
||||
impl EventEmitter<DismissEvent> for BookmarkPicker {}
|
||||
|
||||
impl Focusable for BookmarkPicker {
|
||||
fn focus_handle(&self, cx: &App) -> FocusHandle {
|
||||
self.picker.focus_handle(cx)
|
||||
}
|
||||
}
|
||||
|
||||
impl Render for BookmarkPicker {
|
||||
fn render(&mut self, _window: &mut Window, _cx: &mut Context<Self>) -> impl IntoElement {
|
||||
v_flex().w(rems(34.)).child(self.picker.clone())
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct BookmarkEntry {
|
||||
bookmark: Bookmark,
|
||||
positions: Vec<usize>,
|
||||
}
|
||||
|
||||
pub struct BookmarkPickerDelegate {
|
||||
picker: WeakEntity<BookmarkPicker>,
|
||||
matches: Vec<BookmarkEntry>,
|
||||
all_bookmarks: Vec<Bookmark>,
|
||||
selected_index: usize,
|
||||
}
|
||||
|
||||
impl BookmarkPickerDelegate {
|
||||
fn new(
|
||||
picker: WeakEntity<BookmarkPicker>,
|
||||
jj_store: Entity<JujutsuStore>,
|
||||
cx: &mut Context<BookmarkPicker>,
|
||||
) -> Self {
|
||||
let bookmarks = jj_store.read(cx).repository().list_bookmarks();
|
||||
|
||||
Self {
|
||||
picker,
|
||||
matches: Vec::new(),
|
||||
all_bookmarks: bookmarks,
|
||||
selected_index: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl PickerDelegate for BookmarkPickerDelegate {
|
||||
type ListItem = ListItem;
|
||||
|
||||
fn placeholder_text(&self, _window: &mut Window, _cx: &mut App) -> Arc<str> {
|
||||
"Select Bookmark…".into()
|
||||
}
|
||||
|
||||
fn match_count(&self) -> usize {
|
||||
self.matches.len()
|
||||
}
|
||||
|
||||
fn selected_index(&self) -> usize {
|
||||
self.selected_index
|
||||
}
|
||||
|
||||
fn set_selected_index(
|
||||
&mut self,
|
||||
ix: usize,
|
||||
_window: &mut Window,
|
||||
_cx: &mut Context<Picker<Self>>,
|
||||
) {
|
||||
self.selected_index = ix;
|
||||
}
|
||||
|
||||
fn update_matches(
|
||||
&mut self,
|
||||
query: String,
|
||||
window: &mut Window,
|
||||
cx: &mut Context<Picker<Self>>,
|
||||
) -> Task<()> {
|
||||
let background = cx.background_executor().clone();
|
||||
let all_bookmarks = self.all_bookmarks.clone();
|
||||
|
||||
cx.spawn_in(window, async move |this, cx| {
|
||||
let matches = if query.is_empty() {
|
||||
all_bookmarks
|
||||
.into_iter()
|
||||
.map(|bookmark| BookmarkEntry {
|
||||
bookmark,
|
||||
positions: Vec::new(),
|
||||
})
|
||||
.collect()
|
||||
} else {
|
||||
let candidates = all_bookmarks
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(ix, bookmark)| StringMatchCandidate::new(ix, &bookmark.ref_name))
|
||||
.collect::<Vec<_>>();
|
||||
match_strings(
|
||||
&candidates,
|
||||
&query,
|
||||
false,
|
||||
100,
|
||||
&Default::default(),
|
||||
background,
|
||||
)
|
||||
.await
|
||||
.into_iter()
|
||||
.map(|mat| BookmarkEntry {
|
||||
bookmark: all_bookmarks[mat.candidate_id].clone(),
|
||||
positions: mat.positions,
|
||||
})
|
||||
.collect()
|
||||
};
|
||||
|
||||
this.update(cx, |this, _cx| {
|
||||
this.delegate.matches = matches;
|
||||
})
|
||||
.log_err();
|
||||
})
|
||||
}
|
||||
|
||||
fn confirm(&mut self, _secondary: bool, _window: &mut Window, _cx: &mut Context<Picker<Self>>) {
|
||||
//
|
||||
}
|
||||
|
||||
fn dismissed(&mut self, _window: &mut Window, cx: &mut Context<Picker<Self>>) {
|
||||
self.picker
|
||||
.update(cx, |_, cx| cx.emit(DismissEvent))
|
||||
.log_err();
|
||||
}
|
||||
|
||||
fn render_match(
|
||||
&self,
|
||||
ix: usize,
|
||||
selected: bool,
|
||||
_window: &mut Window,
|
||||
_cx: &mut Context<Picker<Self>>,
|
||||
) -> Option<Self::ListItem> {
|
||||
let entry = &self.matches[ix];
|
||||
|
||||
Some(
|
||||
ListItem::new(ix)
|
||||
.inset(true)
|
||||
.spacing(ListItemSpacing::Sparse)
|
||||
.toggle_state(selected)
|
||||
.child(HighlightedLabel::new(
|
||||
entry.bookmark.ref_name.clone(),
|
||||
entry.positions.clone(),
|
||||
)),
|
||||
)
|
||||
}
|
||||
}
|
39
crates/jj_ui/src/jj_ui.rs
Normal file
39
crates/jj_ui/src/jj_ui.rs
Normal file
|
@ -0,0 +1,39 @@
|
|||
mod bookmark_picker;
|
||||
|
||||
use command_palette_hooks::CommandPaletteFilter;
|
||||
use feature_flags::FeatureFlagAppExt as _;
|
||||
use gpui::App;
|
||||
use jj::JujutsuStore;
|
||||
use workspace::Workspace;
|
||||
|
||||
pub fn init(cx: &mut App) {
|
||||
JujutsuStore::init_global(cx);
|
||||
|
||||
cx.observe_new(|workspace: &mut Workspace, _window, _cx| {
|
||||
bookmark_picker::register(workspace);
|
||||
})
|
||||
.detach();
|
||||
|
||||
feature_gate_jj_ui_actions(cx);
|
||||
}
|
||||
|
||||
fn feature_gate_jj_ui_actions(cx: &mut App) {
|
||||
const JJ_ACTION_NAMESPACE: &str = "jj";
|
||||
|
||||
CommandPaletteFilter::update_global(cx, |filter, _cx| {
|
||||
filter.hide_namespace(JJ_ACTION_NAMESPACE);
|
||||
});
|
||||
|
||||
cx.observe_flag::<feature_flags::JjUiFeatureFlag, _>({
|
||||
move |is_enabled, cx| {
|
||||
CommandPaletteFilter::update_global(cx, |filter, _cx| {
|
||||
if is_enabled {
|
||||
filter.show_namespace(JJ_ACTION_NAMESPACE);
|
||||
} else {
|
||||
filter.hide_namespace(JJ_ACTION_NAMESPACE);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
.detach();
|
||||
}
|
|
@ -67,6 +67,7 @@ image_viewer.workspace = true
|
|||
indoc.workspace = true
|
||||
inline_completion_button.workspace = true
|
||||
install_cli.workspace = true
|
||||
jj_ui.workspace = true
|
||||
journal.workspace = true
|
||||
language.workspace = true
|
||||
language_extension.workspace = true
|
||||
|
|
|
@ -565,6 +565,7 @@ fn main() {
|
|||
notifications::init(app_state.client.clone(), app_state.user_store.clone(), cx);
|
||||
collab_ui::init(&app_state, cx);
|
||||
git_ui::init(cx);
|
||||
jj_ui::init(cx);
|
||||
feedback::init(cx);
|
||||
markdown_preview::init(cx);
|
||||
welcome::init(cx);
|
||||
|
|
|
@ -142,6 +142,12 @@ pub mod git {
|
|||
action_with_deprecated_aliases!(git, Branch, ["branches::OpenRecent"]);
|
||||
}
|
||||
|
||||
pub mod jj {
|
||||
use gpui::actions;
|
||||
|
||||
actions!(jj, [BookmarkList]);
|
||||
}
|
||||
|
||||
pub mod command_palette {
|
||||
use gpui::actions;
|
||||
|
||||
|
|
|
@ -51,6 +51,7 @@ digest = { version = "0.10", features = ["mac", "oid", "std"] }
|
|||
either = { version = "1", features = ["serde", "use_std"] }
|
||||
euclid = { version = "0.22" }
|
||||
event-listener = { version = "5" }
|
||||
flate2 = { version = "1", features = ["zlib-rs"] }
|
||||
form_urlencoded = { version = "1" }
|
||||
futures = { version = "0.3", features = ["io-compat"] }
|
||||
futures-channel = { version = "0.3", features = ["sink"] }
|
||||
|
@ -69,6 +70,7 @@ hmac = { version = "0.12", default-features = false, features = ["reset"] }
|
|||
hyper = { version = "0.14", features = ["client", "http1", "http2", "runtime", "server", "stream"] }
|
||||
idna = { version = "1" }
|
||||
indexmap = { version = "2", features = ["serde"] }
|
||||
jiff = { version = "0.2" }
|
||||
lazy_static = { version = "1", default-features = false, features = ["spin_no_std"] }
|
||||
libc = { version = "0.2", features = ["extra_traits"] }
|
||||
libsqlite3-sys = { version = "0.30", features = ["bundled", "unlock_notify"] }
|
||||
|
@ -91,6 +93,7 @@ phf_shared = { version = "0.11" }
|
|||
prost = { version = "0.9" }
|
||||
prost-types = { version = "0.9" }
|
||||
rand-c38e5c1d305a1b54 = { package = "rand", version = "0.8", features = ["small_rng"] }
|
||||
rand_chacha = { version = "0.3" }
|
||||
rand_core = { version = "0.6", default-features = false, features = ["std"] }
|
||||
regex = { version = "1" }
|
||||
regex-automata = { version = "0.4" }
|
||||
|
@ -105,8 +108,9 @@ sea-query-binder = { version = "0.7", default-features = false, features = ["pos
|
|||
semver = { version = "1", features = ["serde"] }
|
||||
serde = { version = "1", features = ["alloc", "derive", "rc"] }
|
||||
serde_json = { version = "1", features = ["preserve_order", "raw_value", "unbounded_depth"] }
|
||||
sha1 = { version = "0.10", features = ["compress"] }
|
||||
simd-adler32 = { version = "0.3" }
|
||||
smallvec = { version = "1", default-features = false, features = ["const_new", "serde", "union"] }
|
||||
smallvec = { version = "1", default-features = false, features = ["const_new", "serde", "union", "write"] }
|
||||
spin = { version = "0.9" }
|
||||
sqlx = { version = "0.8", features = ["bigdecimal", "chrono", "postgres", "runtime-tokio-rustls", "rust_decimal", "sqlite", "time", "uuid"] }
|
||||
sqlx-postgres = { version = "0.8", default-features = false, features = ["any", "bigdecimal", "chrono", "json", "migrate", "offline", "rust_decimal", "time", "uuid"] }
|
||||
|
@ -118,9 +122,11 @@ time = { version = "0.3", features = ["local-offset", "macros", "serde-well-know
|
|||
tokio = { version = "1", features = ["full"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["tls12"] }
|
||||
tokio-util = { version = "0.7", features = ["codec", "compat", "io"] }
|
||||
toml_edit = { version = "0.22", features = ["serde"] }
|
||||
tracing = { version = "0.1", features = ["log"] }
|
||||
tracing-core = { version = "0.1" }
|
||||
tungstenite = { version = "0.26", default-features = false, features = ["__rustls-tls", "handshake"] }
|
||||
unicode-normalization = { version = "0.1" }
|
||||
unicode-properties = { version = "0.1" }
|
||||
url = { version = "2", features = ["serde"] }
|
||||
uuid = { version = "1", features = ["serde", "v4", "v5", "v7"] }
|
||||
|
@ -129,6 +135,7 @@ wasmparser = { version = "0.221" }
|
|||
wasmtime = { version = "29", default-features = false, features = ["async", "component-model", "cranelift", "demangle", "gc-drc"] }
|
||||
wasmtime-cranelift = { version = "29", default-features = false, features = ["component-model", "gc-drc"] }
|
||||
wasmtime-environ = { version = "29", default-features = false, features = ["compile", "component-model", "demangle", "gc-drc"] }
|
||||
winnow = { version = "0.7", features = ["simd"] }
|
||||
|
||||
[build-dependencies]
|
||||
ahash = { version = "0.8", features = ["serde"] }
|
||||
|
@ -168,6 +175,7 @@ digest = { version = "0.10", features = ["mac", "oid", "std"] }
|
|||
either = { version = "1", features = ["serde", "use_std"] }
|
||||
euclid = { version = "0.22" }
|
||||
event-listener = { version = "5" }
|
||||
flate2 = { version = "1", features = ["zlib-rs"] }
|
||||
form_urlencoded = { version = "1" }
|
||||
futures = { version = "0.3", features = ["io-compat"] }
|
||||
futures-channel = { version = "0.3", features = ["sink"] }
|
||||
|
@ -188,6 +196,7 @@ hyper = { version = "0.14", features = ["client", "http1", "http2", "runtime", "
|
|||
idna = { version = "1" }
|
||||
indexmap = { version = "2", features = ["serde"] }
|
||||
itertools-594e8ee84c453af0 = { package = "itertools", version = "0.13" }
|
||||
jiff = { version = "0.2" }
|
||||
lazy_static = { version = "1", default-features = false, features = ["spin_no_std"] }
|
||||
libc = { version = "0.2", features = ["extra_traits"] }
|
||||
libsqlite3-sys = { version = "0.30", features = ["bundled", "unlock_notify"] }
|
||||
|
@ -213,6 +222,7 @@ prost = { version = "0.9" }
|
|||
prost-types = { version = "0.9" }
|
||||
quote = { version = "1" }
|
||||
rand-c38e5c1d305a1b54 = { package = "rand", version = "0.8", features = ["small_rng"] }
|
||||
rand_chacha = { version = "0.3" }
|
||||
rand_core = { version = "0.6", default-features = false, features = ["std"] }
|
||||
regex = { version = "1" }
|
||||
regex-automata = { version = "0.4" }
|
||||
|
@ -228,8 +238,9 @@ semver = { version = "1", features = ["serde"] }
|
|||
serde = { version = "1", features = ["alloc", "derive", "rc"] }
|
||||
serde_derive = { version = "1", features = ["deserialize_in_place"] }
|
||||
serde_json = { version = "1", features = ["preserve_order", "raw_value", "unbounded_depth"] }
|
||||
sha1 = { version = "0.10", features = ["compress"] }
|
||||
simd-adler32 = { version = "0.3" }
|
||||
smallvec = { version = "1", default-features = false, features = ["const_new", "serde", "union"] }
|
||||
smallvec = { version = "1", default-features = false, features = ["const_new", "serde", "union", "write"] }
|
||||
spin = { version = "0.9" }
|
||||
sqlx = { version = "0.8", features = ["bigdecimal", "chrono", "postgres", "runtime-tokio-rustls", "rust_decimal", "sqlite", "time", "uuid"] }
|
||||
sqlx-macros = { version = "0.8", features = ["_rt-tokio", "_tls-rustls-ring-webpki", "bigdecimal", "chrono", "derive", "json", "macros", "migrate", "postgres", "rust_decimal", "sqlite", "time", "uuid"] }
|
||||
|
@ -246,9 +257,11 @@ time-macros = { version = "0.2", default-features = false, features = ["formatti
|
|||
tokio = { version = "1", features = ["full"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["tls12"] }
|
||||
tokio-util = { version = "0.7", features = ["codec", "compat", "io"] }
|
||||
toml_edit = { version = "0.22", features = ["serde"] }
|
||||
tracing = { version = "0.1", features = ["log"] }
|
||||
tracing-core = { version = "0.1" }
|
||||
tungstenite = { version = "0.26", default-features = false, features = ["__rustls-tls", "handshake"] }
|
||||
unicode-normalization = { version = "0.1" }
|
||||
unicode-properties = { version = "0.1" }
|
||||
url = { version = "2", features = ["serde"] }
|
||||
uuid = { version = "1", features = ["serde", "v4", "v5", "v7"] }
|
||||
|
@ -257,13 +270,13 @@ wasmparser = { version = "0.221" }
|
|||
wasmtime = { version = "29", default-features = false, features = ["async", "component-model", "cranelift", "demangle", "gc-drc"] }
|
||||
wasmtime-cranelift = { version = "29", default-features = false, features = ["component-model", "gc-drc"] }
|
||||
wasmtime-environ = { version = "29", default-features = false, features = ["compile", "component-model", "demangle", "gc-drc"] }
|
||||
winnow = { version = "0.7", features = ["simd"] }
|
||||
|
||||
[target.x86_64-apple-darwin.dependencies]
|
||||
codespan-reporting = { version = "0.12" }
|
||||
core-foundation = { version = "0.9" }
|
||||
core-foundation-sys = { version = "0.8" }
|
||||
coreaudio-sys = { version = "0.2", default-features = false, features = ["audio_toolbox", "audio_unit", "core_audio", "core_midi", "open_al"] }
|
||||
flate2 = { version = "1" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
|
@ -293,7 +306,6 @@ codespan-reporting = { version = "0.12" }
|
|||
core-foundation = { version = "0.9" }
|
||||
core-foundation-sys = { version = "0.8" }
|
||||
coreaudio-sys = { version = "0.2", default-features = false, features = ["audio_toolbox", "audio_unit", "core_audio", "core_midi", "open_al"] }
|
||||
flate2 = { version = "1" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
|
@ -323,7 +335,6 @@ codespan-reporting = { version = "0.12" }
|
|||
core-foundation = { version = "0.9" }
|
||||
core-foundation-sys = { version = "0.8" }
|
||||
coreaudio-sys = { version = "0.2", default-features = false, features = ["audio_toolbox", "audio_unit", "core_audio", "core_midi", "open_al"] }
|
||||
flate2 = { version = "1" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
|
@ -353,7 +364,6 @@ codespan-reporting = { version = "0.12" }
|
|||
core-foundation = { version = "0.9" }
|
||||
core-foundation-sys = { version = "0.8" }
|
||||
coreaudio-sys = { version = "0.2", default-features = false, features = ["audio_toolbox", "audio_unit", "core_audio", "core_midi", "open_al"] }
|
||||
flate2 = { version = "1" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
|
@ -386,7 +396,6 @@ cipher = { version = "0.4", default-features = false, features = ["block-padding
|
|||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
event-listener-strategy = { version = "0.5" }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
|
@ -409,14 +418,12 @@ ring = { version = "0.17", features = ["std"] }
|
|||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "param", "pipe", "process", "pty", "shm", "stdio", "system", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net", "process", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
|
||||
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
|
||||
tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
|
||||
zeroize = { version = "1", features = ["zeroize_derive"] }
|
||||
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
|
||||
|
@ -429,7 +436,6 @@ cipher = { version = "0.4", default-features = false, features = ["block-padding
|
|||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
event-listener-strategy = { version = "0.5" }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
|
@ -451,13 +457,11 @@ ring = { version = "0.17", features = ["std"] }
|
|||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "param", "pipe", "process", "pty", "shm", "stdio", "system", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net", "process", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
|
||||
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
|
||||
tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
|
||||
zeroize = { version = "1", features = ["zeroize_derive"] }
|
||||
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
|
||||
|
@ -470,7 +474,6 @@ cipher = { version = "0.4", default-features = false, features = ["block-padding
|
|||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
event-listener-strategy = { version = "0.5" }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
|
@ -493,14 +496,12 @@ ring = { version = "0.17", features = ["std"] }
|
|||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "param", "pipe", "process", "pty", "shm", "stdio", "system", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net", "process", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
|
||||
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
|
||||
tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
|
||||
zeroize = { version = "1", features = ["zeroize_derive"] }
|
||||
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
|
||||
|
@ -513,7 +514,6 @@ cipher = { version = "0.4", default-features = false, features = ["block-padding
|
|||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
event-listener-strategy = { version = "0.5" }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
|
@ -535,20 +535,17 @@ ring = { version = "0.17", features = ["std"] }
|
|||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "param", "pipe", "process", "pty", "shm", "stdio", "system", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net", "process", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
|
||||
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
|
||||
tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
|
||||
zeroize = { version = "1", features = ["zeroize_derive"] }
|
||||
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
|
||||
|
||||
[target.x86_64-pc-windows-msvc.dependencies]
|
||||
codespan-reporting = { version = "0.12" }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
|
@ -568,12 +565,11 @@ winapi = { version = "0.3", default-features = false, features = ["cfg", "commap
|
|||
windows-core = { version = "0.61" }
|
||||
windows-numerics = { version = "0.2" }
|
||||
windows-sys-73dcd821b1037cfd = { package = "windows-sys", version = "0.59", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Win32_Globalization", "Win32_NetworkManagement_IpHelper", "Win32_Networking_WinSock", "Win32_Security_Authentication_Identity", "Win32_Security_Credentials", "Win32_Security_Cryptography", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_Console", "Win32_System_Diagnostics_Debug", "Win32_System_IO", "Win32_System_Ioctl", "Win32_System_Kernel", "Win32_System_LibraryLoader", "Win32_System_Memory", "Win32_System_Performance", "Win32_System_Pipes", "Win32_System_Registry", "Win32_System_SystemInformation", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_Time", "Win32_System_WindowsProgramming", "Win32_UI_Input_KeyboardAndMouse", "Win32_UI_Shell", "Win32_UI_WindowsAndMessaging"] }
|
||||
windows-sys-b21d60becc0929df = { package = "windows-sys", version = "0.52", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Wdk_System_IO", "Win32_Foundation", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_IO", "Win32_System_Pipes", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_WindowsProgramming"] }
|
||||
windows-sys-b21d60becc0929df = { package = "windows-sys", version = "0.52", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Wdk_System_IO", "Win32_Foundation", "Win32_Networking_WinSock", "Win32_Security_Authorization", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_IO", "Win32_System_Memory", "Win32_System_Pipes", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_WindowsProgramming"] }
|
||||
windows-sys-c8eced492e86ede7 = { package = "windows-sys", version = "0.48", features = ["Win32_Foundation", "Win32_Globalization", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_Diagnostics_Debug", "Win32_System_IO", "Win32_System_Pipes", "Win32_System_Registry", "Win32_System_Threading", "Win32_System_Time", "Win32_UI_Shell"] }
|
||||
|
||||
[target.x86_64-pc-windows-msvc.build-dependencies]
|
||||
codespan-reporting = { version = "0.12" }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
|
@ -594,7 +590,7 @@ winapi = { version = "0.3", default-features = false, features = ["cfg", "commap
|
|||
windows-core = { version = "0.61" }
|
||||
windows-numerics = { version = "0.2" }
|
||||
windows-sys-73dcd821b1037cfd = { package = "windows-sys", version = "0.59", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Win32_Globalization", "Win32_NetworkManagement_IpHelper", "Win32_Networking_WinSock", "Win32_Security_Authentication_Identity", "Win32_Security_Credentials", "Win32_Security_Cryptography", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_Console", "Win32_System_Diagnostics_Debug", "Win32_System_IO", "Win32_System_Ioctl", "Win32_System_Kernel", "Win32_System_LibraryLoader", "Win32_System_Memory", "Win32_System_Performance", "Win32_System_Pipes", "Win32_System_Registry", "Win32_System_SystemInformation", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_Time", "Win32_System_WindowsProgramming", "Win32_UI_Input_KeyboardAndMouse", "Win32_UI_Shell", "Win32_UI_WindowsAndMessaging"] }
|
||||
windows-sys-b21d60becc0929df = { package = "windows-sys", version = "0.52", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Wdk_System_IO", "Win32_Foundation", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_IO", "Win32_System_Pipes", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_WindowsProgramming"] }
|
||||
windows-sys-b21d60becc0929df = { package = "windows-sys", version = "0.52", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Wdk_System_IO", "Win32_Foundation", "Win32_Networking_WinSock", "Win32_Security_Authorization", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_IO", "Win32_System_Memory", "Win32_System_Pipes", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_WindowsProgramming"] }
|
||||
windows-sys-c8eced492e86ede7 = { package = "windows-sys", version = "0.48", features = ["Win32_Foundation", "Win32_Globalization", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_Diagnostics_Debug", "Win32_System_IO", "Win32_System_Pipes", "Win32_System_Registry", "Win32_System_Threading", "Win32_System_Time", "Win32_UI_Shell"] }
|
||||
|
||||
[target.x86_64-unknown-linux-musl.dependencies]
|
||||
|
@ -605,7 +601,6 @@ cipher = { version = "0.4", default-features = false, features = ["block-padding
|
|||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
event-listener-strategy = { version = "0.5" }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
|
@ -628,14 +623,12 @@ ring = { version = "0.17", features = ["std"] }
|
|||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "param", "pipe", "process", "pty", "shm", "stdio", "system", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net", "process", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
|
||||
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
|
||||
tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
|
||||
zeroize = { version = "1", features = ["zeroize_derive"] }
|
||||
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
|
||||
|
@ -648,7 +641,6 @@ cipher = { version = "0.4", default-features = false, features = ["block-padding
|
|||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
event-listener-strategy = { version = "0.5" }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
|
@ -670,13 +662,11 @@ ring = { version = "0.17", features = ["std"] }
|
|||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "param", "pipe", "process", "pty", "shm", "stdio", "system", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net", "process", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
|
||||
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
|
||||
tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
|
||||
zeroize = { version = "1", features = ["zeroize_derive"] }
|
||||
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue