11use crate :: model:: AvailableExtension ;
22use crate :: repository:: steampipe:: URL ;
33use crate :: repository:: { steampipe, Repository } ;
4+ use crate :: Error :: ExtensionNotFound ;
45use crate :: Result ;
56use async_trait:: async_trait;
67use flate2:: bufread:: GzDecoder ;
@@ -67,7 +68,14 @@ impl Repository for Steampipe {
6768 name : & str ,
6869 version : & VersionReq ,
6970 ) -> Result < ( Version , Vec < u8 > ) > {
70- let url = format ! ( "{URL}/steampipe-plugin-{name}?postgresql_version={postgresql_version}" ) ;
71+ let Some ( extension) = steampipe:: extensions:: get ( )
72+ . iter ( )
73+ . find ( |extension| extension. name == name)
74+ else {
75+ let extension = format ! ( "{}:{}:{}" , self . name( ) , name, version) ;
76+ return Err ( ExtensionNotFound ( extension) ) ;
77+ } ;
78+ let url = format ! ( "{}?postgresql_version={postgresql_version}" , extension. url) ;
7179 let archive = get_archive ( url. as_str ( ) , version) . await ?;
7280 Ok ( archive)
7381 }
@@ -120,7 +128,7 @@ mod tests {
120128 }
121129
122130 #[ tokio:: test]
123- async fn test_get_extensions ( ) -> Result < ( ) > {
131+ async fn test_get_available_extensions ( ) -> Result < ( ) > {
124132 let repository = Steampipe ;
125133 let extensions = repository. get_available_extensions ( ) . await ?;
126134 let extension = & extensions[ 0 ] ;
@@ -133,4 +141,17 @@ mod tests {
133141 assert_eq ! ( 143 , extensions. len( ) ) ;
134142 Ok ( ( ) )
135143 }
144+
145+ #[ tokio:: test]
146+ async fn test_get_archive_error ( ) -> anyhow:: Result < ( ) > {
147+ let repository = Steampipe ;
148+ let postgresql_version = "15.7" ;
149+ let name = "does-not-exist" ;
150+ let version = VersionReq :: parse ( "=0.12.0" ) ?;
151+ let result = repository
152+ . get_archive ( postgresql_version, name, & version)
153+ . await ;
154+ assert ! ( result. is_err( ) ) ;
155+ Ok ( ( ) )
156+ }
136157}
0 commit comments