@@ -20,6 +20,7 @@ type GetMetadataResponse struct {
2020 Diagnostics diag.Diagnostics
2121 EphemeralResources []EphemeralResourceMetadata
2222 Functions []FunctionMetadata
23+ ListResources []ListResourceMetadata
2324 Resources []ResourceMetadata
2425 ServerCapabilities * ServerCapabilities
2526}
@@ -52,28 +53,39 @@ type ResourceMetadata struct {
5253 TypeName string
5354}
5455
56+ // ListResourceMetadata is the framework server equivalent of the
57+ // tfprotov5.ListResourceMetadata and tfprotov6.ListResourceMetadata types.
58+ type ListResourceMetadata struct {
59+ // TypeName is the name of the list resource.
60+ TypeName string
61+ }
62+
5563// GetMetadata implements the framework server GetMetadata RPC.
5664func (s * Server ) GetMetadata (ctx context.Context , req * GetMetadataRequest , resp * GetMetadataResponse ) {
5765 resp .DataSources = []DataSourceMetadata {}
5866 resp .EphemeralResources = []EphemeralResourceMetadata {}
5967 resp .Functions = []FunctionMetadata {}
68+ resp .ListResources = []ListResourceMetadata {}
6069 resp .Resources = []ResourceMetadata {}
70+
6171 resp .ServerCapabilities = s .ServerCapabilities ()
6272
6373 datasourceMetadatas , diags := s .DataSourceMetadatas (ctx )
64-
6574 resp .Diagnostics .Append (diags ... )
6675
6776 ephemeralResourceMetadatas , diags := s .EphemeralResourceMetadatas (ctx )
68-
6977 resp .Diagnostics .Append (diags ... )
7078
7179 functionMetadatas , diags := s .FunctionMetadatas (ctx )
72-
7380 resp .Diagnostics .Append (diags ... )
7481
7582 resourceMetadatas , diags := s .ResourceMetadatas (ctx )
83+ resp .Diagnostics .Append (diags ... )
7684
85+ // Metadata for list resources must be retrieved after metadata for managed
86+ // resources. Server.ListResourceMetadatas checks that each list resource
87+ // type nane matches a known managed Resource type name.
88+ listResourceMetadatas , diags := s .ListResourceMetadatas (ctx )
7789 resp .Diagnostics .Append (diags ... )
7890
7991 if resp .Diagnostics .HasError () {
@@ -83,5 +95,6 @@ func (s *Server) GetMetadata(ctx context.Context, req *GetMetadataRequest, resp
8395 resp .DataSources = datasourceMetadatas
8496 resp .EphemeralResources = ephemeralResourceMetadatas
8597 resp .Functions = functionMetadatas
98+ resp .ListResources = listResourceMetadatas
8699 resp .Resources = resourceMetadatas
87100}
0 commit comments