@@ -147,8 +147,7 @@ impl AddCommand {
147147 bail ! ( "No exported interfaces found in the component" )
148148 } ;
149149
150- let mut package_interface_map: HashMap < String , Vec < String > > = HashMap :: new ( ) ;
151- let mut selected_interfaces: Vec < String > = Vec :: new ( ) ;
150+ let mut package_interface_map: HashMap < _ , Vec < String > > = HashMap :: new ( ) ;
152151
153152 // Map interfaces to their respective packages
154153 for ( package_name, interface) in exported_interfaces {
@@ -165,6 +164,8 @@ impl AddCommand {
165164 & package_names,
166165 ) ?;
167166
167+ let mut selected_interfaces = Vec :: new ( ) ;
168+
168169 for & package_idx in selected_package_indices. iter ( ) {
169170 let package_name = & package_names[ package_idx] ;
170171 let interfaces = package_interface_map. get ( package_name) . unwrap ( ) ;
@@ -190,10 +191,19 @@ impl AddCommand {
190191 ) ?;
191192
192193 if interface_count > 1 && selected_interface_idx == 0 {
193- selected_interfaces. push ( package_name. clone ( ) ) ;
194+ selected_interfaces. push ( package_name. to_string ( ) ) ;
194195 } else {
195196 let interface_name = & interface_options[ selected_interface_idx] ;
196- selected_interfaces. push ( format ! ( "{}/{}" , package_name, interface_name) ) ;
197+ let full_itf_name = if let Some ( version) = package_name. version . as_ref ( ) {
198+ format ! (
199+ "{ns}:{name}/{interface_name}@{version}" ,
200+ ns = package_name. namespace,
201+ name = package_name. name
202+ )
203+ } else {
204+ format ! ( "{package_name}/{interface_name}" )
205+ } ;
206+ selected_interfaces. push ( full_itf_name) ;
197207 }
198208 }
199209
@@ -231,7 +241,7 @@ impl AddCommand {
231241
232242 for interface in selected_interfaces {
233243 component. dependencies . inner . insert (
234- DependencyName :: Package ( DependencyPackageName :: try_from ( interface) ?) ,
244+ DependencyName :: Package ( DependencyPackageName :: try_from ( interface. clone ( ) ) ?) ,
235245 component_dependency. clone ( ) ,
236246 ) ;
237247 }
0 commit comments