package_boundary.rs (2262B)
1 #![forbid(unsafe_code)] 2 3 const ROOT: &str = include_str!("../src/lib.rs"); 4 const CLI_ROOT: &str = include_str!("../src/cli/mod.rs"); 5 const PUBLIC_API: &str = include_str!("../contracts/api_baselines/radroots_cli.txt"); 6 const FLAKE: &str = include_str!("../flake.nix"); 7 8 #[test] 9 fn implementation_modules_are_private_and_api_is_root_only() { 10 assert!(ROOT.contains("mod cli;")); 11 assert!(!ROOT.contains("pub mod cli;")); 12 assert!(!ROOT.contains("pub use cli::*;")); 13 assert!(!CLI_ROOT.contains("::*;")); 14 for implementation in [ 15 "account", 16 "basket", 17 "diagnostics", 18 "farm", 19 "health", 20 "listing", 21 "market", 22 "profile", 23 "signer", 24 "store", 25 "sync", 26 "trade", 27 "transport", 28 "validation", 29 ] { 30 assert!(!PUBLIC_API.contains(&format!("radroots_cli::{implementation}::"))); 31 } 32 for required in [ 33 "pub struct radroots_cli::TargetCliArgs", 34 "pub enum radroots_cli::TargetCommand", 35 "pub enum radroots_cli::TargetOutputFormat", 36 ] { 37 assert!(PUBLIC_API.contains(required), "missing {required}"); 38 } 39 for dependency in ["clap::", "radroots::", "serde_json::"] { 40 assert!(!PUBLIC_API.contains(dependency), "leaked {dependency}"); 41 } 42 } 43 44 #[test] 45 fn nix_outputs_are_real_owned_and_exactly_bounded() { 46 for required in [ 47 "github:radrootslabs/lib/3563f3b5a4331eb2cb3f925cafc9de524d844228", 48 "\"aarch64-darwin\"", 49 "\"x86_64-linux\"", 50 "craneLib.buildPackage", 51 "craneLib.mkCargoDerivation", 52 "program = \"${package}/bin/radroots\"", 53 "default = (cliOutputs system).package", 54 "default = (cliOutputs system).check", 55 "default = (cliOutputs system).app", 56 ] { 57 assert!( 58 FLAKE.contains(required), 59 "missing governed Nix source: {required}" 60 ); 61 } 62 for forbidden in [ 63 "writeShellApplication", 64 "git rev-parse", 65 "repo_root", 66 "devShells", 67 "nixosModules", 68 "aarch64-linux", 69 "x86_64-darwin", 70 ] { 71 assert!( 72 !FLAKE.contains(forbidden), 73 "forbidden Nix surface is present: {forbidden}" 74 ); 75 } 76 }