@@ -780,57 +780,28 @@ pub fn package_review_to_facts(input: &RsScriptPackageReviewInput) -> Vec<Fact>
780780 for dependency in & input. dependencies {
781781 let dependency_subject = dependency_subject ( dependency) ;
782782 let dependency_slug = normalized_id ( & dependency_subject. id ) ;
783- let value = dependency_risk_value ( dependency) ;
784- let unknown = matches ! ( value, FactValue :: Unknown ) ;
785- facts. push ( Fact {
786- schema : FACT_SCHEMA . to_owned ( ) ,
787- id : format ! ( "fact.dependency.{}.risk" , dependency_slug) ,
788- kind : FactKind :: DependencyRisk ,
789- role : None ,
790- subject : dependency_subject,
791- capability : None ,
792- value,
793- confidence : confidence ( dependency_confidence ( dependency) , PACKAGE_REVIEW_SOURCE ) ,
794- acquisition_mode : AcquisitionMode :: PackageMetadata ,
795- precision : Precision :: Category ,
796- evidence : vec ! [ package_metadata(
797- & input. package_name,
798- & input. version,
799- dependency. requirement. clone( ) ,
800- Some ( dependency_summary( dependency) ) ,
801- ) ] ,
802- unknown_reason : unknown
803- . then ( || "dependency source is unresolved by package review" . to_owned ( ) ) ,
804- } ) ;
783+ facts. push ( build_dependency_risk_fact (
784+ format ! ( "fact.dependency.{}.risk" , dependency_slug) ,
785+ dependency_subject,
786+ dependency,
787+ & input. package_name ,
788+ & input. version ,
789+ ) ) ;
805790 }
806791
807792 for export in & input. exports {
808793 let export_subject = public_contract_subject ( & input. package_name , export) ;
809- let export_value = public_contract_value ( export) ;
810- let export_unknown = matches ! ( export_value, FactValue :: Unknown ) ;
811- facts. push ( Fact {
812- schema : FACT_SCHEMA . to_owned ( ) ,
813- id : format ! (
794+ facts. push ( build_public_contract_fact (
795+ format ! (
814796 "fact.public_contract.{}.{}" ,
815797 package_slug,
816798 normalized_id( & export_subject. id)
817799 ) ,
818- kind : FactKind :: PublicContract ,
819- role : None ,
820- subject : export_subject. clone ( ) ,
821- capability : None ,
822- value : export_value,
823- confidence : confidence ( public_contract_confidence ( export) , PACKAGE_REVIEW_SOURCE ) ,
824- acquisition_mode : AcquisitionMode :: CompilerContract ,
825- precision : Precision :: Exact ,
826- evidence : vec ! [ package_metadata(
827- & input. package_name,
828- & input. version,
829- Some ( export. kind. clone( ) ) ,
830- Some ( package_export_summary( export) ) ,
831- ) ] ,
832- unknown_reason : export_unknown. then ( || public_contract_unknown_reason ( export) ) ,
833- } ) ;
800+ export_subject. clone ( ) ,
801+ export,
802+ & input. package_name ,
803+ & input. version ,
804+ ) ) ;
834805 if let Some ( protocol_fact) = protocol_impl_fact (
835806 export,
836807 & export_subject,
@@ -878,52 +849,26 @@ pub fn package_review_to_facts(input: &RsScriptPackageReviewInput) -> Vec<Fact>
878849
879850 for boundary in & input. native_boundaries {
880851 let boundary_subject = native_boundary_subject ( & input. package_name , & boundary. module_name ) ;
881- facts. push ( Fact {
882- schema : FACT_SCHEMA . to_owned ( ) ,
883- id : format ! (
852+ facts. push ( build_native_boundary_fact (
853+ format ! (
884854 "fact.native_module_declaration.{}" ,
885855 normalized_id( & boundary_subject. id)
886856 ) ,
887- kind : FactKind :: NativeModuleDeclaration ,
888- role : None ,
889- subject : boundary_subject. clone ( ) ,
890- capability : None ,
891- value : FactValue :: True ,
892- confidence : confidence ( ConfidenceLevel :: Authoritative , PACKAGE_REVIEW_SOURCE ) ,
893- acquisition_mode : AcquisitionMode :: CompilerContract ,
894- precision : Precision :: Exact ,
895- evidence : vec ! [ source_span(
896- & boundary. file,
897- boundary. line,
898- & boundary. module_name,
899- Some ( native_module_declaration_reason( boundary) ) ,
900- PACKAGE_REVIEW_SOURCE ,
901- ) ] ,
902- unknown_reason : None ,
903- } ) ;
904- facts. push ( Fact {
905- schema : FACT_SCHEMA . to_owned ( ) ,
906- id : format ! (
857+ FactKind :: NativeModuleDeclaration ,
858+ boundary_subject. clone ( ) ,
859+ boundary,
860+ native_module_declaration_reason ( boundary) ,
861+ ) ) ;
862+ facts. push ( build_native_boundary_fact (
863+ format ! (
907864 "fact.native_boundary.{}" ,
908865 normalized_id( & boundary_subject. id)
909866 ) ,
910- kind : FactKind :: NativeBoundary ,
911- role : None ,
912- subject : boundary_subject,
913- capability : None ,
914- value : FactValue :: True ,
915- confidence : confidence ( ConfidenceLevel :: Authoritative , PACKAGE_REVIEW_SOURCE ) ,
916- acquisition_mode : AcquisitionMode :: CompilerContract ,
917- precision : Precision :: Exact ,
918- evidence : vec ! [ source_span(
919- & boundary. file,
920- boundary. line,
921- & boundary. module_name,
922- Some ( native_boundary_reason( boundary) ) ,
923- PACKAGE_REVIEW_SOURCE ,
924- ) ] ,
925- unknown_reason : None ,
926- } ) ;
867+ FactKind :: NativeBoundary ,
868+ boundary_subject,
869+ boundary,
870+ native_boundary_reason ( boundary) ,
871+ ) ) ;
927872 }
928873
929874 facts
@@ -3611,6 +3556,96 @@ fn capability_fact(
36113556 }
36123557}
36133558
3559+ fn build_dependency_risk_fact (
3560+ id : String ,
3561+ subject : Subject ,
3562+ dependency : & RsScriptPackageDependency ,
3563+ package_name : & str ,
3564+ version : & str ,
3565+ ) -> Fact {
3566+ let value = dependency_risk_value ( dependency) ;
3567+ let unknown = matches ! ( value, FactValue :: Unknown ) ;
3568+ Fact {
3569+ schema : FACT_SCHEMA . to_owned ( ) ,
3570+ id,
3571+ kind : FactKind :: DependencyRisk ,
3572+ role : None ,
3573+ subject,
3574+ capability : None ,
3575+ value,
3576+ confidence : confidence ( dependency_confidence ( dependency) , PACKAGE_REVIEW_SOURCE ) ,
3577+ acquisition_mode : AcquisitionMode :: PackageMetadata ,
3578+ precision : Precision :: Category ,
3579+ evidence : vec ! [ package_metadata(
3580+ package_name,
3581+ version,
3582+ dependency. requirement. clone( ) ,
3583+ Some ( dependency_summary( dependency) ) ,
3584+ ) ] ,
3585+ unknown_reason : unknown
3586+ . then ( || "dependency source is unresolved by package review" . to_owned ( ) ) ,
3587+ }
3588+ }
3589+
3590+ fn build_public_contract_fact (
3591+ id : String ,
3592+ subject : Subject ,
3593+ export : & RsScriptPackageExport ,
3594+ package_name : & str ,
3595+ version : & str ,
3596+ ) -> Fact {
3597+ let value = public_contract_value ( export) ;
3598+ let unknown = matches ! ( value, FactValue :: Unknown ) ;
3599+ Fact {
3600+ schema : FACT_SCHEMA . to_owned ( ) ,
3601+ id,
3602+ kind : FactKind :: PublicContract ,
3603+ role : None ,
3604+ subject,
3605+ capability : None ,
3606+ value,
3607+ confidence : confidence ( public_contract_confidence ( export) , PACKAGE_REVIEW_SOURCE ) ,
3608+ acquisition_mode : AcquisitionMode :: CompilerContract ,
3609+ precision : Precision :: Exact ,
3610+ evidence : vec ! [ package_metadata(
3611+ package_name,
3612+ version,
3613+ Some ( export. kind. clone( ) ) ,
3614+ Some ( package_export_summary( export) ) ,
3615+ ) ] ,
3616+ unknown_reason : unknown. then ( || public_contract_unknown_reason ( export) ) ,
3617+ }
3618+ }
3619+
3620+ fn build_native_boundary_fact (
3621+ id : String ,
3622+ kind : FactKind ,
3623+ subject : Subject ,
3624+ boundary : & RsScriptNativeBoundary ,
3625+ reason : String ,
3626+ ) -> Fact {
3627+ Fact {
3628+ schema : FACT_SCHEMA . to_owned ( ) ,
3629+ id,
3630+ kind,
3631+ role : None ,
3632+ subject,
3633+ capability : None ,
3634+ value : FactValue :: True ,
3635+ confidence : confidence ( ConfidenceLevel :: Authoritative , PACKAGE_REVIEW_SOURCE ) ,
3636+ acquisition_mode : AcquisitionMode :: CompilerContract ,
3637+ precision : Precision :: Exact ,
3638+ evidence : vec ! [ source_span(
3639+ & boundary. file,
3640+ boundary. line,
3641+ & boundary. module_name,
3642+ Some ( reason) ,
3643+ PACKAGE_REVIEW_SOURCE ,
3644+ ) ] ,
3645+ unknown_reason : None ,
3646+ }
3647+ }
3648+
36143649fn native_edge (
36153650 id : String ,
36163651 from : Subject ,
0 commit comments