diff options
-rw-r--r-- | nix-rust/local.mk | 2 | ||||
-rw-r--r-- | nix-rust/src/c.rs | 42 | ||||
-rw-r--r-- | nix-rust/src/foreign.rs | 19 | ||||
-rw-r--r-- | nix-rust/src/lib.rs | 65 | ||||
-rw-r--r-- | nix-rust/src/store/binary_cache_store.rs (renamed from nix-rust/src/binary_cache_store.rs) | 3 | ||||
-rw-r--r-- | nix-rust/src/store/mod.rs | 7 | ||||
-rw-r--r-- | nix-rust/src/store/path_info.rs (renamed from nix-rust/src/path_info.rs) | 0 | ||||
-rw-r--r-- | nix-rust/src/store/store.rs (renamed from nix-rust/src/store.rs) | 2 | ||||
-rw-r--r-- | nix-rust/src/util/mod.rs | 1 | ||||
-rw-r--r-- | nix-rust/src/util/tarfile.rs (renamed from nix-rust/src/tarfile.rs) | 0 |
10 files changed, 74 insertions, 67 deletions
diff --git a/nix-rust/local.mk b/nix-rust/local.mk index cf1a5c5c5..1157f7894 100644 --- a/nix-rust/local.mk +++ b/nix-rust/local.mk @@ -18,7 +18,7 @@ libnixrust_LDFLAGS_USE += -Wl,-rpath,$(abspath $(d)/target/$(RUST_DIR)) libnixrust_LDFLAGS_USE_INSTALLED += -Wl,-rpath,$(libdir) endif -$(libnixrust_PATH): $(wildcard $(d)/src/*.rs) $(d)/Cargo.toml +$(libnixrust_PATH): $(call rwildcard, $(d)/src, *.rs) $(d)/Cargo.toml $(trace-gen) cd nix-rust && CARGO_HOME=$$(if [[ -d vendor ]]; then echo vendor; fi) \ $(libnixrust_BUILD_FLAGS) \ RUSTC_BOOTSTRAP=1 cargo build $(RUST_MODE) $$(if [[ -d vendor ]]; then echo --offline; fi) \ diff --git a/nix-rust/src/c.rs b/nix-rust/src/c.rs new file mode 100644 index 000000000..1abd34198 --- /dev/null +++ b/nix-rust/src/c.rs @@ -0,0 +1,42 @@ +use super::{foreign::{self, CBox}, error, util, store}; + +#[no_mangle] +pub extern "C" fn unpack_tarfile( + source: foreign::Source, + dest_dir: &str, +) -> CBox<Result<(), error::CppException>> { + CBox::new(util::tarfile::unpack_tarfile(source, dest_dir).map_err(|err| err.into())) +} + +#[no_mangle] +pub extern "C" fn rust_test() { + use crate::store::Store; + use futures::future::{FutureExt, TryFutureExt}; + use std::path::Path; + + let fut = async move { + let store: Box<dyn Store> = Box::new(store::BinaryCacheStore::new( + "https://cache.nixos.org".to_string(), + )); + + let path = store + .parse_store_path(&Path::new( + "/nix/store/7h7qgvs4kgzsn8a6rb273saxyqh4jxlz-konsole-18.12.3", + )) + .unwrap(); + + /* + let info = store.query_path_info(&path).await.unwrap(); + + eprintln!("INFO = {:?}", info); + */ + + let closure = store.compute_path_closure(vec![path].into_iter().collect()).await.unwrap(); + + eprintln!("CLOSURE = {:?}", closure.len()); + + Ok(()) + }; + + tokio::run(fut.boxed().compat()); +} diff --git a/nix-rust/src/foreign.rs b/nix-rust/src/foreign.rs index 7bce7753c..8e04280f3 100644 --- a/nix-rust/src/foreign.rs +++ b/nix-rust/src/foreign.rs @@ -12,3 +12,22 @@ impl std::io::Read for Source { Ok(n) } } + +pub struct CBox<T> { + pub ptr: *mut libc::c_void, + phantom: std::marker::PhantomData<T>, +} + +impl<T> CBox<T> { + pub fn new(t: T) -> Self { + unsafe { + let size = std::mem::size_of::<T>(); + let ptr = libc::malloc(size); + *(ptr as *mut T) = t; // FIXME: probably UB + Self { + ptr, + phantom: std::marker::PhantomData, + } + } + } +} diff --git a/nix-rust/src/lib.rs b/nix-rust/src/lib.rs index 7445e005c..2dbe6a217 100644 --- a/nix-rust/src/lib.rs +++ b/nix-rust/src/lib.rs @@ -1,70 +1,9 @@ #![feature(await_macro, async_await)] -mod binary_cache_store; +mod c; mod error; mod foreign; mod store; -mod tarfile; -mod path_info; +mod util; pub use error::Error; - -pub struct CBox<T> { - pub ptr: *mut libc::c_void, - phantom: std::marker::PhantomData<T>, -} - -impl<T> CBox<T> { - fn new(t: T) -> Self { - unsafe { - let size = std::mem::size_of::<T>(); - let ptr = libc::malloc(size); - *(ptr as *mut T) = t; // FIXME: probably UB - Self { - ptr, - phantom: std::marker::PhantomData, - } - } - } -} - -#[no_mangle] -pub extern "C" fn unpack_tarfile( - source: foreign::Source, - dest_dir: &str, -) -> CBox<Result<(), error::CppException>> { - CBox::new(tarfile::unpack_tarfile(source, dest_dir).map_err(|err| err.into())) -} - -#[no_mangle] -pub extern "C" fn rust_test() { - use crate::store::Store; - use futures::future::{FutureExt, TryFutureExt}; - use std::path::Path; - - let fut = async move { - let store: Box<dyn Store> = Box::new(binary_cache_store::BinaryCacheStore::new( - "https://cache.nixos.org".to_string(), - )); - - let path = store - .parse_store_path(&Path::new( - "/nix/store/7h7qgvs4kgzsn8a6rb273saxyqh4jxlz-konsole-18.12.3", - )) - .unwrap(); - - /* - let info = store.query_path_info(&path).await.unwrap(); - - eprintln!("INFO = {:?}", info); - */ - - let closure = store.compute_path_closure(vec![path].into_iter().collect()).await.unwrap(); - - eprintln!("CLOSURE = {:?}", closure.len()); - - Ok(()) - }; - - tokio::run(fut.boxed().compat()); -} diff --git a/nix-rust/src/binary_cache_store.rs b/nix-rust/src/store/binary_cache_store.rs index b7e61eb2d..f3c7b39bb 100644 --- a/nix-rust/src/binary_cache_store.rs +++ b/nix-rust/src/store/binary_cache_store.rs @@ -1,5 +1,4 @@ -use crate::store::{Store, StorePath}; -use crate::path_info::PathInfo; +use super::{Store, StorePath, PathInfo}; use crate::Error; use futures::compat::Future01CompatExt; diff --git a/nix-rust/src/store/mod.rs b/nix-rust/src/store/mod.rs new file mode 100644 index 000000000..a0d1c72ab --- /dev/null +++ b/nix-rust/src/store/mod.rs @@ -0,0 +1,7 @@ +mod binary_cache_store; +mod path_info; +mod store; + +pub use binary_cache_store::BinaryCacheStore; +pub use path_info::PathInfo; +pub use store::{Store, StorePath}; diff --git a/nix-rust/src/path_info.rs b/nix-rust/src/store/path_info.rs index 2759e03d4..2759e03d4 100644 --- a/nix-rust/src/path_info.rs +++ b/nix-rust/src/store/path_info.rs diff --git a/nix-rust/src/store.rs b/nix-rust/src/store/store.rs index 256dcf0f3..ceaed6648 100644 --- a/nix-rust/src/store.rs +++ b/nix-rust/src/store/store.rs @@ -1,4 +1,4 @@ -use crate::path_info::PathInfo; +use super::PathInfo; use crate::Error; use std::collections::{BTreeMap, BTreeSet}; use std::path::Path; diff --git a/nix-rust/src/util/mod.rs b/nix-rust/src/util/mod.rs new file mode 100644 index 000000000..209627893 --- /dev/null +++ b/nix-rust/src/util/mod.rs @@ -0,0 +1 @@ +pub mod tarfile; diff --git a/nix-rust/src/tarfile.rs b/nix-rust/src/util/tarfile.rs index 379d9098f..379d9098f 100644 --- a/nix-rust/src/tarfile.rs +++ b/nix-rust/src/util/tarfile.rs |