diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index dd7a2c8..fb19052 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -19,20 +19,22 @@ jobs: env: GH_TOKEN: ${{ secrets.GH_TOKEN }} run: | - # Configure git to use gh as a credential helper for https://github.com gh auth setup-git + - name: Setup nix + uses: DeterminateSystems/determinate-nix-action@v3.11.1 + - name: Check formatting env: GH_TOKEN: ${{ secrets.GH_TOKEN }} - run: cargo fmt --all -- --check + run: nix develop --command cargo fmt --all -- --check - name: Run Clippy (fail on warnings) env: GH_TOKEN: ${{ secrets.GH_TOKEN }} - run: cargo clippy --all-targets --all-features -- -D warnings + run: nix develop --command cargo clippy --all-targets --all-features -- -D warnings - name: Run tests env: GH_TOKEN: ${{ secrets.GH_TOKEN }} - run: cargo test --verbose + run: nix develop --command cargo test --verbose diff --git a/abstracted/src/abstracted/abstract_bluetooth.rs b/abstracted/src/abstracted/abstract_bluetooth.rs index dd53006..e169284 100644 --- a/abstracted/src/abstracted/abstract_bluetooth.rs +++ b/abstracted/src/abstracted/abstract_bluetooth.rs @@ -1,18 +1,16 @@ -use bc_envelope::prelude::CBOREncodable; -use bc_envelope::{EnvelopeEncodable, Expression, ResponseBehavior}; -use bc_xid::XIDDocument; -use gstp::{SealedRequestBehavior, SealedResponseBehavior}; -use { - crate::{AbstractEnclave, SecureFrom, SecureTryFrom}, - anyhow::Result, - async_trait::async_trait, - bc_components::ARID, - bc_envelope::Envelope, - gstp::{SealedRequest, SealedResponse}, - std::time::Duration, -}; +use std::time::Duration; +use anyhow::Result; +use async_trait::async_trait; +use bc_components::ARID; +use bc_envelope::{ + prelude::CBOREncodable, Envelope, EnvelopeEncodable, Expression, ResponseBehavior, +}; +use bc_xid::XIDDocument; use btp::{chunk, Dechunker}; +use gstp::{SealedRequest, SealedRequestBehavior, SealedResponse, SealedResponseBehavior}; + +use crate::{AbstractEnclave, SecureFrom, SecureTryFrom}; #[async_trait] pub trait AbstractBluetoothChannel { diff --git a/abstracted/src/abstracted/abstract_enclave.rs b/abstracted/src/abstracted/abstract_enclave.rs index 5b97dc8..370783c 100644 --- a/abstracted/src/abstracted/abstract_enclave.rs +++ b/abstracted/src/abstracted/abstract_enclave.rs @@ -1,6 +1,8 @@ +use anyhow::Result; +use bc_components::ARID; +use bc_envelope::prelude::*; use bc_xid::XIDDocument; use gstp::{SealedRequest, SealedResponse}; -use {anyhow::Result, bc_components::ARID, bc_envelope::prelude::*}; pub trait AbstractEnclave { // Public key operations @@ -12,7 +14,8 @@ pub trait AbstractEnclave { fn sign(&self, envelope: &Envelope) -> Envelope; fn seal_response(&self, envelope: &SealedResponse, recipient: &XIDDocument) -> Envelope; fn decrypt(&self, envelope: &Envelope) -> Result; - //fn unseal(&self, envelope: &Envelope, sender: &XIDDocument) -> Result; + //fn unseal(&self, envelope: &Envelope, sender: &XIDDocument) -> + // Result; fn self_decrypt(&self, envelope: &Envelope) -> Result; // Request -> Envelope diff --git a/api-demo/src/demo/bluetooth.rs b/api-demo/src/demo/bluetooth.rs index 2456d91..835bcaf 100644 --- a/api-demo/src/demo/bluetooth.rs +++ b/api-demo/src/demo/bluetooth.rs @@ -1,15 +1,14 @@ -use { - anyhow::Result, - async_trait::async_trait, - foundation_abstracted::AbstractBluetoothChannel, - std::sync::Arc, - tokio::{ - sync::{ - mpsc::{self, Receiver, Sender}, - Mutex, - }, - time::{self, Duration}, +use std::sync::Arc; + +use anyhow::Result; +use async_trait::async_trait; +use foundation_abstracted::AbstractBluetoothChannel; +use tokio::{ + sync::{ + mpsc::{self, Receiver, Sender}, + Mutex, }, + time::{self, Duration}, }; #[derive(Debug)] diff --git a/api-demo/src/demo/enclave.rs b/api-demo/src/demo/enclave.rs index fad0a3d..5108eb7 100644 --- a/api-demo/src/demo/enclave.rs +++ b/api-demo/src/demo/enclave.rs @@ -1,14 +1,11 @@ #![allow(dead_code)] -use bc_components::{EncapsulationScheme, SignatureScheme}; +use anyhow::Result; +use bc_components::{EncapsulationScheme, PrivateKeys, PublicKeys, SignatureScheme, ARID}; +use bc_envelope::prelude::*; use bc_xid::XIDDocument; +use foundation_abstracted::AbstractEnclave; use gstp::{SealedRequest, SealedResponse}; -use { - anyhow::Result, - bc_components::{PrivateKeys, PublicKeys, ARID}, - bc_envelope::prelude::*, - foundation_abstracted::AbstractEnclave, -}; #[derive(Debug)] pub struct Enclave { @@ -65,8 +62,8 @@ impl AbstractEnclave for Enclave { envelope.decrypt_to_recipient(&self.private_keys) } - // fn unseal(&self, envelope: &Envelope, sender: &XIDDocument) -> Result { - // envelope.unseal(sender, &self.private_key) + // fn unseal(&self, envelope: &Envelope, sender: &XIDDocument) -> + // Result { envelope.unseal(sender, &self.private_key) // } fn self_decrypt(&self, envelope: &Envelope) -> Result { @@ -122,7 +119,9 @@ impl AbstractEnclave for Enclave { #[cfg(test)] pub mod tests { - use {super::*, indoc::indoc}; + use indoc::indoc; + + use super::*; #[test] fn test_sign() { @@ -171,8 +170,8 @@ pub mod tests { // let enclave1 = Enclave::new(); // let enclave2 = Enclave::new(); // let envelope = Envelope::new("Hello, World!"); - // let signed_and_encrypted = enclave1.seal(&envelope, enclave2.xid_document()); - // assert_eq!( + // let signed_and_encrypted = enclave1.seal(&envelope, + // enclave2.xid_document()); assert_eq!( // signed_and_encrypted.format(), // (indoc! { // r#" diff --git a/api-demo/src/demo/envoy.rs b/api-demo/src/demo/envoy.rs index b6f18fd..7a0e342 100644 --- a/api-demo/src/demo/envoy.rs +++ b/api-demo/src/demo/envoy.rs @@ -1,24 +1,22 @@ +use std::sync::Arc; + +use anyhow::{anyhow, bail, Ok, Result}; +use bc_envelope::prelude::*; use bc_xid::XIDDocument; -use foundation_api::api::discovery::Discovery; -use foundation_api::api::quantum_link::QUANTUM_LINK; -use foundation_api::quantum_link::QuantumLink; - -use foundation_api::api::message::QuantumLinkMessage; -use foundation_api::fx::ExchangeRate; -use foundation_api::message::{EnvoyMessage, PassportMessage}; -use foundation_api::pairing::PairingRequest; +use foundation_abstracted::{AbstractBluetoothChannel, SecureTryFrom}; +use foundation_api::{ + api::{discovery::Discovery, message::QuantumLinkMessage, quantum_link::QUANTUM_LINK}, + fx::ExchangeRate, + message::{EnvoyMessage, PassportMessage}, + pairing::PairingRequest, + quantum_link::QuantumLink, +}; use gstp::{SealedResponse, SealedResponseBehavior}; -use { - crate::{ - chapter_title, latency, paint_broadcast, paint_response, sleep, BluetoothChannel, Camera, - Enclave, - }, - anyhow::{anyhow, bail, Ok, Result}, - bc_envelope::prelude::*, - foundation_abstracted::AbstractBluetoothChannel, - foundation_abstracted::SecureTryFrom, - std::sync::Arc, - tokio::{sync::Mutex, task::JoinHandle, time::Duration}, +use tokio::{sync::Mutex, task::JoinHandle, time::Duration}; + +use crate::{ + chapter_title, latency, paint_broadcast, paint_response, sleep, BluetoothChannel, Camera, + Enclave, }; pub const ENVOY_PREFIX: &str = "🔶 Envoy "; @@ -119,7 +117,8 @@ impl Envoy { envelope: Envelope, _stop: Arc>, ) -> Result<()> { - // TODO: Need code here to determine if it's a SealedResponse, SealedRequest or Event + // TODO: Need code here to determine if it's a SealedResponse, SealedRequest or + // Event let response = SealedResponse::secure_try_from(envelope, &self.enclave)?; log!("📡 Received: {}", paint_response!(response)); diff --git a/api-demo/src/demo/passport.rs b/api-demo/src/demo/passport.rs index 34746eb..e2f09a3 100644 --- a/api-demo/src/demo/passport.rs +++ b/api-demo/src/demo/passport.rs @@ -1,26 +1,26 @@ +use std::sync::Arc; + +use anyhow::{bail, Result}; +use bc_envelope::prelude::*; use bc_xid::XIDDocument; -use foundation_api::api::message::QuantumLinkMessage; -use foundation_api::api::passport::{PassportFirmwareVersion, PassportSerial}; -use foundation_api::api::quantum_link::QuantumLink; -use foundation_api::api::quantum_link::QUANTUM_LINK; -use foundation_api::message::EnvoyMessage; -use foundation_api::pairing::PairingResponse; -use foundation_api::passport::{PassportColor, PassportModel}; -use gstp::SealedRequest; -use gstp::SealedRequestBehavior; -use { - super::{BluetoothChannel, Screen}, - crate::{chapter_title, latency, paint_broadcast, paint_request, Enclave}, - anyhow::{bail, Result}, - bc_envelope::prelude::*, - foundation_abstracted::AbstractBluetoothChannel, - foundation_abstracted::AbstractEnclave, - foundation_abstracted::SecureTryFrom, - foundation_api::api::discovery::Discovery, - foundation_ur::Encoder, - std::sync::Arc, - tokio::{sync::Mutex, task::JoinHandle, time::Duration}, +use foundation_abstracted::{AbstractBluetoothChannel, AbstractEnclave, SecureTryFrom}; +use foundation_api::{ + api::{ + discovery::Discovery, + message::QuantumLinkMessage, + passport::{PassportFirmwareVersion, PassportSerial}, + quantum_link::{QuantumLink, QUANTUM_LINK}, + }, + message::EnvoyMessage, + pairing::PairingResponse, + passport::{PassportColor, PassportModel}, }; +use foundation_ur::Encoder; +use gstp::{SealedRequest, SealedRequestBehavior}; +use tokio::{sync::Mutex, task::JoinHandle, time::Duration}; + +use super::{BluetoothChannel, Screen}; +use crate::{chapter_title, latency, paint_broadcast, paint_request, Enclave}; pub const PASSPORT_PREFIX: &str = "🛂 Passport"; diff --git a/api-demo/src/demo/screen.rs b/api-demo/src/demo/screen.rs index 1f0dbb1..1ff866d 100644 --- a/api-demo/src/demo/screen.rs +++ b/api-demo/src/demo/screen.rs @@ -1,13 +1,12 @@ -use { - anyhow::Result, - bc_envelope::prelude::*, - std::{ - sync::{Arc, Mutex}, - time::Duration, - }, - tokio::sync::Notify, +use std::{ + sync::{Arc, Mutex}, + time::Duration, }; +use anyhow::Result; +use bc_envelope::prelude::*; +use tokio::sync::Notify; + #[derive(Debug)] pub struct ScreenPeers { screen: Arc, diff --git a/api/rustfmt.toml b/api/rustfmt.toml deleted file mode 100644 index b6633a8..0000000 --- a/api/rustfmt.toml +++ /dev/null @@ -1,11 +0,0 @@ -format_code_in_doc_comments = true -format_strings = true -imports_layout = "HorizontalVertical" -imports_granularity = "One" -normalize_doc_attributes = true -group_imports = "StdExternalCrate" -use_try_shorthand = true -wrap_comments = true -remove_nested_parens = true -unstable_features = true -use_field_init_shorthand = true diff --git a/api/src/api/backup.rs b/api/src/api/backup.rs index 4ec6759..a0e7424 100644 --- a/api/src/api/backup.rs +++ b/api/src/api/backup.rs @@ -1,9 +1,8 @@ -use crate::api::quantum_link::QuantumLink; use flutter_rust_bridge::frb; -use { - minicbor_derive::{Decode, Encode}, - quantum_link_macros::quantum_link, -}; +use minicbor_derive::{Decode, Encode}; +use quantum_link_macros::quantum_link; + +use crate::api::quantum_link::QuantumLink; #[quantum_link] pub struct Shard { diff --git a/api/src/api/bitcoin.rs b/api/src/api/bitcoin.rs index d0cf146..3aef12b 100644 --- a/api/src/api/bitcoin.rs +++ b/api/src/api/bitcoin.rs @@ -1,8 +1,9 @@ -use crate::quantum_link::QuantumLink; use flutter_rust_bridge::frb; use minicbor_derive::{Decode, Encode}; use quantum_link_macros::quantum_link; +use crate::quantum_link::QuantumLink; + #[quantum_link] pub struct SignPsbt { #[n(0)] diff --git a/api/src/api/discovery.rs b/api/src/api/discovery.rs index f39af83..96e4491 100644 --- a/api/src/api/discovery.rs +++ b/api/src/api/discovery.rs @@ -1,4 +1,6 @@ -use {anyhow::Result, bc_envelope::prelude::*, bc_xid::XIDDocument}; +use anyhow::Result; +use bc_envelope::prelude::*; +use bc_xid::XIDDocument; // Functions pub const DISCOVERY_FUNCTION: Function = Function::new_static_named("discovery"); diff --git a/api/src/api/firmware.rs b/api/src/api/firmware.rs index 48bedf0..ce41dbd 100644 --- a/api/src/api/firmware.rs +++ b/api/src/api/firmware.rs @@ -1,8 +1,9 @@ -use crate::quantum_link::QuantumLink; use flutter_rust_bridge::frb; use minicbor_derive::{Decode, Encode}; use quantum_link_macros::quantum_link; +use crate::quantum_link::QuantumLink; + // From Prime to Envoy #[quantum_link] pub struct FirmwareUpdateCheckRequest { diff --git a/api/src/api/fx.rs b/api/src/api/fx.rs index 1502996..e162006 100644 --- a/api/src/api/fx.rs +++ b/api/src/api/fx.rs @@ -1,9 +1,8 @@ -use crate::api::quantum_link::QuantumLink; use flutter_rust_bridge::frb; -use { - minicbor_derive::{Decode, Encode}, - quantum_link_macros::quantum_link, -}; +use minicbor_derive::{Decode, Encode}; +use quantum_link_macros::quantum_link; + +use crate::api::quantum_link::QuantumLink; #[quantum_link] pub struct ExchangeRate { diff --git a/api/src/api/message.rs b/api/src/api/message.rs index 26b51cb..8e05a25 100644 --- a/api/src/api/message.rs +++ b/api/src/api/message.rs @@ -1,23 +1,26 @@ -use super::onboarding::OnboardingState; -use crate::api::raw::RawData; -use crate::backup::{ - BackupShardRequest, BackupShardResponse, MagicBackupEnabledRequest, MagicBackupEnabledResponse, - RestoreShardRequest, RestoreShardResponse, -}; -use crate::bitcoin::*; -use crate::firmware::{ - FirmwareFetchEvent, FirmwareFetchRequest, FirmwareUpdateCheckRequest, - FirmwareUpdateCheckResponse, FirmwareUpdateResult, -}; -use crate::fx::ExchangeRate; -use crate::pairing::{PairingRequest, PairingResponse}; -use crate::quantum_link::QuantumLink; -use crate::scv::SecurityCheck; -use crate::status::{DeviceStatus, EnvoyStatus}; use flutter_rust_bridge::frb; use minicbor_derive::{Decode, Encode}; use quantum_link_macros::quantum_link; +use super::onboarding::OnboardingState; +use crate::{ + api::raw::RawData, + backup::{ + BackupShardRequest, BackupShardResponse, MagicBackupEnabledRequest, + MagicBackupEnabledResponse, RestoreShardRequest, RestoreShardResponse, + }, + bitcoin::*, + firmware::{ + FirmwareFetchEvent, FirmwareFetchRequest, FirmwareUpdateCheckRequest, + FirmwareUpdateCheckResponse, FirmwareUpdateResult, + }, + fx::ExchangeRate, + pairing::{PairingRequest, PairingResponse}, + quantum_link::QuantumLink, + scv::SecurityCheck, + status::{DeviceStatus, EnvoyStatus}, +}; + #[quantum_link] pub struct RawMessage { #[n(0)] diff --git a/api/src/api/onboarding.rs b/api/src/api/onboarding.rs index cc8019f..8307ab3 100644 --- a/api/src/api/onboarding.rs +++ b/api/src/api/onboarding.rs @@ -1,9 +1,8 @@ -use crate::api::quantum_link::QuantumLink; use flutter_rust_bridge::frb; -use { - minicbor_derive::{Decode, Encode}, - quantum_link_macros::quantum_link, -}; +use minicbor_derive::{Decode, Encode}; +use quantum_link_macros::quantum_link; + +use crate::api::quantum_link::QuantumLink; #[quantum_link] pub enum OnboardingState { diff --git a/api/src/api/pairing.rs b/api/src/api/pairing.rs index ca41378..3cc7d63 100644 --- a/api/src/api/pairing.rs +++ b/api/src/api/pairing.rs @@ -1,10 +1,13 @@ -use crate::api::quantum_link::QuantumLink; -use crate::passport::PassportColor; use flutter_rust_bridge::frb; +use minicbor_derive::{Decode, Encode}; use quantum_link_macros::quantum_link; -use { - crate::api::passport::{PassportFirmwareVersion, PassportModel, PassportSerial}, - minicbor_derive::{Decode, Encode}, + +use crate::{ + api::{ + passport::{PassportFirmwareVersion, PassportModel, PassportSerial}, + quantum_link::QuantumLink, + }, + passport::PassportColor, }; #[quantum_link] diff --git a/api/src/api/passport.rs b/api/src/api/passport.rs index f341d14..400aac6 100644 --- a/api/src/api/passport.rs +++ b/api/src/api/passport.rs @@ -1,9 +1,8 @@ -use crate::api::quantum_link::QuantumLink; use flutter_rust_bridge::frb; -use { - minicbor_derive::{Decode, Encode}, - quantum_link_macros::quantum_link, -}; +use minicbor_derive::{Decode, Encode}; +use quantum_link_macros::quantum_link; + +use crate::api::quantum_link::QuantumLink; #[quantum_link] pub enum PassportModel { diff --git a/api/src/api/quantum_link.rs b/api/src/api/quantum_link.rs index dc7d979..a891407 100644 --- a/api/src/api/quantum_link.rs +++ b/api/src/api/quantum_link.rs @@ -1,12 +1,15 @@ -use crate::message::{EnvoyMessage, PassportMessage}; use anyhow::bail; use bc_components::{EncapsulationScheme, PrivateKeys, PublicKeys, SignatureScheme, ARID}; -use bc_envelope::prelude::{CBORCase, CBOR}; -use bc_envelope::{Envelope, EventBehavior, Expression, ExpressionBehavior, Function}; +use bc_envelope::{ + prelude::{CBORCase, CBOR}, + Envelope, EventBehavior, Expression, ExpressionBehavior, Function, +}; use bc_xid::XIDDocument; use flutter_rust_bridge::frb; use gstp::{SealedEvent, SealedEventBehavior}; +use crate::message::{EnvoyMessage, PassportMessage}; + pub const QUANTUM_LINK: Function = Function::new_static_named("quantumLink"); pub trait QuantumLink: minicbor::Encode { fn encode(&self) -> Expression @@ -142,11 +145,12 @@ impl QuantumLinkIdentity { #[cfg(test)] mod tests { - use crate::api::message::QuantumLinkMessage; - use crate::api::quantum_link::QuantumLink; - use crate::fx::ExchangeRate; - use crate::message::EnvoyMessage; - use crate::quantum_link::QuantumLinkIdentity; + use crate::{ + api::{message::QuantumLinkMessage, quantum_link::QuantumLink}, + fx::ExchangeRate, + message::EnvoyMessage, + quantum_link::QuantumLinkIdentity, + }; #[test] fn test_encode_decode_quantumlink_message() { diff --git a/api/src/api/raw.rs b/api/src/api/raw.rs index e0b462b..c7e89f1 100644 --- a/api/src/api/raw.rs +++ b/api/src/api/raw.rs @@ -1,9 +1,8 @@ -use crate::api::quantum_link::QuantumLink; use flutter_rust_bridge::frb; -use { - minicbor_derive::{Decode, Encode}, - quantum_link_macros::quantum_link, -}; +use minicbor_derive::{Decode, Encode}; +use quantum_link_macros::quantum_link; + +use crate::api::quantum_link::QuantumLink; #[quantum_link] pub struct RawData { diff --git a/api/src/api/scv.rs b/api/src/api/scv.rs index 03667cb..ede46be 100644 --- a/api/src/api/scv.rs +++ b/api/src/api/scv.rs @@ -1,9 +1,8 @@ -use crate::api::quantum_link::QuantumLink; use flutter_rust_bridge::frb; -use { - minicbor_derive::{Decode, Encode}, - quantum_link_macros::quantum_link, -}; +use minicbor_derive::{Decode, Encode}; +use quantum_link_macros::quantum_link; + +use crate::api::quantum_link::QuantumLink; #[quantum_link] pub enum SecurityCheck { diff --git a/api/src/api/settings.rs b/api/src/api/settings.rs index c83c740..20a3fa2 100644 --- a/api/src/api/settings.rs +++ b/api/src/api/settings.rs @@ -1,9 +1,8 @@ -use crate::api::quantum_link::QuantumLink; use flutter_rust_bridge::frb; -use { - minicbor_derive::{Decode, Encode}, - quantum_link_macros::quantum_link, -}; +use minicbor_derive::{Decode, Encode}; +use quantum_link_macros::quantum_link; + +use crate::api::quantum_link::QuantumLink; #[quantum_link] pub struct Settings { diff --git a/api/src/api/status.rs b/api/src/api/status.rs index c7f7480..df934f0 100644 --- a/api/src/api/status.rs +++ b/api/src/api/status.rs @@ -1,9 +1,8 @@ -use crate::api::quantum_link::QuantumLink; use flutter_rust_bridge::frb; -use { - minicbor_derive::{Decode, Encode}, - quantum_link_macros::quantum_link, -}; +use minicbor_derive::{Decode, Encode}; +use quantum_link_macros::quantum_link; + +use crate::api::quantum_link::QuantumLink; #[quantum_link] pub enum DeviceState { diff --git a/btp/src/dechunk.rs b/btp/src/dechunk.rs index fb05624..03edc69 100644 --- a/btp/src/dechunk.rs +++ b/btp/src/dechunk.rs @@ -147,7 +147,8 @@ impl Dechunker { } /// Inserts a chunk. Use this for multiple concurrent messages. - /// First decode with [`Chunk::decode()`], lookup decoder by message ID, then insert. + /// First decode with [`Chunk::decode()`], lookup decoder by message ID, + /// then insert. pub fn insert_chunk(&mut self, chunk: Chunk) -> Result<(), MessageIdError> { let header = &chunk.header; @@ -184,8 +185,9 @@ impl Dechunker { Ok(()) } - /// Decodes and inserts raw chunk data. Use this for single message at a time. - /// For multiple concurrent messages, use [`Chunk::parse()`] then [`Dechunker::insert_chunk()`]. + /// Decodes and inserts raw chunk data. Use this for single message at a + /// time. For multiple concurrent messages, use [`Chunk::parse()`] then + /// [`Dechunker::insert_chunk()`]. pub fn receive(&mut self, data: &[u8]) -> Result<(), ReceiveError> { let chunk_with_header = Chunk::decode(data)?; self.insert_chunk(chunk_with_header)?; diff --git a/btp/src/tests.rs b/btp/src/tests.rs index 431309f..4a359a2 100644 --- a/btp/src/tests.rs +++ b/btp/src/tests.rs @@ -1,8 +1,9 @@ +use rand::{seq::SliceRandom, Rng, RngCore}; + use crate::{ chunk, Chunk, Dechunker, DecodeError, MasterDechunker, MessageIdError, APP_MTU, CHUNK_DATA_SIZE, HEADER_SIZE, }; -use rand::{seq::SliceRandom, Rng, RngCore}; static TEST_STR: &[u8]= b" This is some example data to be chunked.This is some example data to be chunked.This is some example data to be chunked. diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..26d0295 --- /dev/null +++ b/flake.lock @@ -0,0 +1,66 @@ +{ + "nodes": { + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1760337631, + "narHash": "sha256-3nvEN2lEpWtM1x7nfuiwpYHLNDgEUiWeBbyvy4vtVw8=", + "owner": "nix-community", + "repo": "fenix", + "rev": "fee7cf67cbd80a74460563388ac358b394014238", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "fenix": "fenix", + "nixpkgs": "nixpkgs" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1760260966, + "narHash": "sha256-pOVvZz/aa+laeaUKyE6PtBevdo4rywMwjhWdSZE/O1c=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "c5181dbbe33af6f21b9d83e02fdb6fda298a3b65", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..4899224 --- /dev/null +++ b/flake.nix @@ -0,0 +1,39 @@ +# SPDX-FileCopyrightText: 2025 Foundation Devices, Inc. +# SPDX-License-Identifier: GPL-3.0-or-later +{ + description = "foudation-api dev environment"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + fenix = { + url = "github:nix-community/fenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { + self, + nixpkgs, + fenix, + }: let + inherit (nixpkgs) lib; + forAllSystems = f: lib.genAttrs ["aarch64-darwin" "x86_64-darwin" "aarch64-linux" "x86_64-linux"] f; + in { + devShells = forAllSystems ( + system: let + pkgs = import nixpkgs { + inherit system; + }; + + toolchain = fenix.packages.${system}.fromToolchainFile { + file = self + "/rust-toolchain.toml"; + sha256 = "sha256-18J/HvJzns0BwRNsUNkCSoIw7MtAmppPu5jNzuzMvCc="; + }; + in { + default = pkgs.mkShellNoCC { + packages = [toolchain]; + }; + } + ); + }; +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..06b58d7 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: 2025 Foundation Devices, Inc. +# SPDX-License-Identifier: GPL-3.0-or-later + +[toolchain] +channel = "nightly-2025-06-24" diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..455c820 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,2 @@ +imports_granularity = "Crate" +group_imports = "StdExternalCrate"