@@ -8,8 +8,8 @@ use anyhow::{Context, Result, bail};
8
8
use camino:: Utf8PathBuf ;
9
9
use clap:: { Args , Parser , Subcommand } ;
10
10
use omicron_ls_apis:: {
11
- AllApiMetadata , ApiDependencyFilter , LoadArgs , ServerComponentName ,
12
- SystemApis , VersionedHow ,
11
+ AllApiMetadata , ApiDependencyFilter , ApiMetadata , LoadArgs ,
12
+ ServerComponentName , SystemApis , VersionedHow ,
13
13
} ;
14
14
use parse_display:: { Display , FromStr } ;
15
15
@@ -108,17 +108,15 @@ fn run_adoc(apis: &SystemApis) -> Result<()> {
108
108
109
109
let metadata = apis. api_metadata ( ) ;
110
110
for api in metadata. apis ( ) {
111
- let Some ( server_component) =
112
- apis. api_producer ( & api. client_package_name )
113
- else {
114
- continue ;
115
- } ;
116
111
println ! ( "// DO NOT EDIT. This table is auto-generated. See above." ) ;
117
- println ! ( "|{}" , api. label) ;
118
- println ! ( "|{}" , apis. adoc_label( server_component) ?) ;
119
112
println ! ( "|{}" , apis. adoc_label( & api. client_package_name) ?) ;
113
+
120
114
println ! ( "|" ) ;
115
+ for server_component in apis. api_producers ( & api. client_package_name ) {
116
+ println ! ( "* {}" , apis. adoc_label( server_component) ?) ;
117
+ }
121
118
119
+ println ! ( "|" ) ;
122
120
for ( c, _) in apis. api_consumers (
123
121
& api. client_package_name ,
124
122
ApiDependencyFilter :: default ( ) ,
@@ -214,12 +212,10 @@ fn print_server_components<'a>(
214
212
for s in server_components. into_iter ( ) {
215
213
let ( repo_name, pkg_path) = apis. package_label ( s) ?;
216
214
println ! ( "{}{} ({}/{})" , prefix, s, repo_name, pkg_path) ;
217
- for api in metadata. apis ( ) . filter ( |a| {
218
- matches ! (
219
- apis. api_producer( & a. client_package_name) ,
220
- Some ( name) if name == s
221
- )
222
- } ) {
215
+ for api in metadata
216
+ . apis ( )
217
+ . filter ( |a| apis. is_producer_of ( s, & a. client_package_name ) )
218
+ {
223
219
println ! (
224
220
"{} exposes: {} (client = {})" ,
225
221
prefix, api. label, api. client_package_name
@@ -301,31 +297,33 @@ fn run_check(apis: &SystemApis) -> Result<()> {
301
297
) ;
302
298
}
303
299
300
+ fn print_api_and_producers ( api : & ApiMetadata , apis : & SystemApis ) {
301
+ print ! ( " {} ({}" , api. label, api. client_package_name, ) ;
302
+ let mut producers = apis. api_producers ( & api. client_package_name ) ;
303
+ if let Some ( producer) = producers. next ( ) {
304
+ print ! ( ", exposed by {producer}" ) ;
305
+ for producer in producers {
306
+ print ! ( ", {producer}" )
307
+ }
308
+ }
309
+ println ! ( ")" ) ;
310
+ }
311
+
304
312
println ! ( "\n " ) ;
305
313
println ! ( "Server-managed APIs:\n " ) ;
306
314
for api in apis
307
315
. api_metadata ( )
308
316
. apis ( )
309
317
. filter ( |f| f. deployed ( ) && f. versioned_how == VersionedHow :: Server )
310
318
{
311
- println ! (
312
- " {} ({}, exposed by {})" ,
313
- api. label,
314
- api. client_package_name,
315
- apis. api_producer( & api. client_package_name) . unwrap( )
316
- ) ;
319
+ print_api_and_producers ( api, apis) ;
317
320
}
318
321
319
322
println ! ( "\n " ) ;
320
323
println ! ( "Client-managed API:\n " ) ;
321
324
for api in apis. api_metadata ( ) . apis ( ) . filter ( |f| f. deployed ( ) ) {
322
325
if let VersionedHow :: Client ( reason) = & api. versioned_how {
323
- println ! (
324
- " {} ({}, exposed by {})" ,
325
- api. label,
326
- api. client_package_name,
327
- apis. api_producer( & api. client_package_name) . unwrap( )
328
- ) ;
326
+ print_api_and_producers ( api, apis) ;
329
327
println ! ( " reason: {}" , reason) ;
330
328
}
331
329
}
@@ -342,12 +340,7 @@ fn run_check(apis: &SystemApis) -> Result<()> {
342
340
} else {
343
341
println ! ( "\n " ) ;
344
342
for api in unknown {
345
- println ! (
346
- " {} ({}, exposed by {})" ,
347
- api. label,
348
- api. client_package_name,
349
- apis. api_producer( & api. client_package_name) . unwrap( )
350
- ) ;
343
+ print_api_and_producers ( api, apis) ;
351
344
}
352
345
bail ! ( "at least one API has unknown version strategy (see above)" ) ;
353
346
}
0 commit comments