Skip to content

Commit dacc1d1

Browse files
refactor(sidekick): Generalize method sample information (#4228)
With the last sample model simplification, some of the specifics of how Rust generates samples were sipping into the model. The samples model is now language neutral, presenting only semantic information.
1 parent 6b0956a commit dacc1d1

7 files changed

Lines changed: 121 additions & 221 deletions

File tree

internal/sidekick/api/model.go

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,9 @@ type Method struct {
324324
IsAIPStandardUpdate bool
325325
// IsAIPStandardList is true if the method is an AIP standard list method.
326326
IsAIPStandardList bool
327-
// AIPStandardSampleInfo contains sample generation information for AIP standard methods.
328-
AIPStandardSampleInfo *AIPStandardSampleInfo
327+
// SampleInfo may contain sample generation information for this method,
328+
// usually if it is an AIP conforming metho.
329+
SampleInfo *SampleInfo
329330
// Codec contains language specific annotations.
330331
Codec any
331332
}
@@ -414,36 +415,19 @@ func (m *Method) HasAutoPopulatedFields() bool {
414415
return len(m.AutoPopulated) != 0
415416
}
416417

417-
// AIPStandardSampleInfo contains information for generating samples for AIP standard methods.
418-
type AIPStandardSampleInfo struct {
419-
// SampleFunctionParameters is a list of string argument names that the generated sample function requires.
420-
SampleFunctionParameters []string
421-
// InitFieldsFromParameter contains fields that should be initialized from a sample function parameter.
422-
InitFieldsFromParameter []*SampleParameterInit
423-
// InitFieldsFromStringLiteral contains fields that should be initialized with a string literal.
424-
InitFieldsFromStringLiteral []*Field
425-
// InitFieldsFromMessage contains fields that should be initialized with a new message instance.
426-
InitFieldsFromMessage []*SampleMessageInit
427-
// UpdateMaskField is the update mask field, if any, that needs to be initialized.
418+
// SampleInfo contains sample generation information for a single method,
419+
// usually if it is an AIP conforming method.
420+
type SampleInfo struct {
421+
// ResourceNameField is the field containing the resource name or parent resource name.
422+
ResourceNameField *Field
423+
// ResourceIDField is the field containing the resource ID, usually present in Create methods.
424+
ResourceIDField *Field
425+
// MessageField is the field containing the message body to be created or updated.
426+
MessageField *Field
427+
// UpdateMaskField is the field containing the update mask, present in Update methods.
428428
UpdateMaskField *Field
429429
}
430430

431-
// SampleParameterInit describes a field that should be initialized from a parameter.
432-
type SampleParameterInit struct {
433-
// Field is the field to be initialized.
434-
Field *Field
435-
// ParameterName is the name of the parameter to use.
436-
ParameterName string
437-
}
438-
439-
// SampleMessageInit describes a field that should be initialized with a message.
440-
type SampleMessageInit struct {
441-
// Field is the field to be initialized.
442-
Field *Field
443-
// ParameterName is the name of the parameter to set as the "name" field of the message, if any.
444-
ParameterName string
445-
}
446-
447431
const (
448432
// StandardFieldNameForResourceRef is the standard name for resource references
449433
// to the resource being operated on by standard methods as defined by AIPs.

internal/sidekick/api/skip_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ var methodIgnoreFields = []string{
322322
"IsAIPStandardCreate",
323323
"IsAIPStandardUpdate",
324324
"IsAIPStandardList",
325-
"AIPStandardSampleInfo",
325+
"SampleInfo",
326326
}
327327

328328
func TestIncludeMethods(t *testing.T) {

internal/sidekick/api/xref.go

Lines changed: 27 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -230,24 +230,24 @@ func enrichMethodSamples(m *Method) {
230230

231231
m.IsStreaming = m.ClientSideStreaming || m.ServerSideStreaming
232232

233-
if m.AIPStandardSampleInfo = aipStandardGetInfo(m); m.AIPStandardSampleInfo != nil {
233+
if m.SampleInfo = aipStandardGetInfo(m); m.SampleInfo != nil {
234234
m.IsAIPStandardGet = true
235-
} else if m.AIPStandardSampleInfo = aipStandardDeleteInfo(m); m.AIPStandardSampleInfo != nil {
235+
} else if m.SampleInfo = aipStandardDeleteInfo(m); m.SampleInfo != nil {
236236
m.IsAIPStandardDelete = true
237-
} else if m.AIPStandardSampleInfo = aipStandardUndeleteInfo(m); m.AIPStandardSampleInfo != nil {
237+
} else if m.SampleInfo = aipStandardUndeleteInfo(m); m.SampleInfo != nil {
238238
m.IsAIPStandardUndelete = true
239-
} else if m.AIPStandardSampleInfo = aipStandardCreateInfo(m); m.AIPStandardSampleInfo != nil {
239+
} else if m.SampleInfo = aipStandardCreateInfo(m); m.SampleInfo != nil {
240240
m.IsAIPStandardCreate = true
241-
} else if m.AIPStandardSampleInfo = aipStandardUpdateInfo(m); m.AIPStandardSampleInfo != nil {
241+
} else if m.SampleInfo = aipStandardUpdateInfo(m); m.SampleInfo != nil {
242242
m.IsAIPStandardUpdate = true
243-
} else if m.AIPStandardSampleInfo = aipStandardListInfo(m); m.AIPStandardSampleInfo != nil {
243+
} else if m.SampleInfo = aipStandardListInfo(m); m.SampleInfo != nil {
244244
m.IsAIPStandardList = true
245245
}
246246

247-
m.IsAIPStandard = m.AIPStandardSampleInfo != nil
247+
m.IsAIPStandard = m.SampleInfo != nil
248248
}
249249

250-
func aipStandardGetInfo(m *Method) *AIPStandardSampleInfo {
250+
func aipStandardGetInfo(m *Method) *SampleInfo {
251251
if !m.IsSimple || m.InputType == nil || m.ReturnsEmpty {
252252
return nil
253253
}
@@ -280,15 +280,12 @@ func aipStandardGetInfo(m *Method) *AIPStandardSampleInfo {
280280
return nil
281281
}
282282

283-
return &AIPStandardSampleInfo{
284-
SampleFunctionParameters: []string{"resource_name"},
285-
InitFieldsFromParameter: []*SampleParameterInit{
286-
{Field: resourceField, ParameterName: "resource_name"},
287-
},
283+
return &SampleInfo{
284+
ResourceNameField: resourceField,
288285
}
289286
}
290287

291-
func aipStandardDeleteInfo(m *Method) *AIPStandardSampleInfo {
288+
func aipStandardDeleteInfo(m *Method) *SampleInfo {
292289
if !m.IsSimple && m.OperationInfo == nil {
293290
return nil
294291
}
@@ -312,15 +309,12 @@ func aipStandardDeleteInfo(m *Method) *AIPStandardSampleInfo {
312309
return nil
313310
}
314311

315-
return &AIPStandardSampleInfo{
316-
SampleFunctionParameters: []string{"resource_name"},
317-
InitFieldsFromParameter: []*SampleParameterInit{
318-
{Field: resourceField, ParameterName: "resource_name"},
319-
},
312+
return &SampleInfo{
313+
ResourceNameField: resourceField,
320314
}
321315
}
322316

323-
func aipStandardUndeleteInfo(m *Method) *AIPStandardSampleInfo {
317+
func aipStandardUndeleteInfo(m *Method) *SampleInfo {
324318
if !m.IsSimple && m.OperationInfo == nil {
325319
return nil
326320
}
@@ -344,15 +338,12 @@ func aipStandardUndeleteInfo(m *Method) *AIPStandardSampleInfo {
344338
return nil
345339
}
346340

347-
return &AIPStandardSampleInfo{
348-
SampleFunctionParameters: []string{"resource_name"},
349-
InitFieldsFromParameter: []*SampleParameterInit{
350-
{Field: resourceField, ParameterName: "resource_name"},
351-
},
341+
return &SampleInfo{
342+
ResourceNameField: resourceField,
352343
}
353344
}
354345

355-
func aipStandardCreateInfo(m *Method) *AIPStandardSampleInfo {
346+
func aipStandardCreateInfo(m *Method) *SampleInfo {
356347
if (!m.IsSimple && !m.IsLRO) || m.InputType == nil || m.ReturnsEmpty {
357348
return nil
358349
}
@@ -391,22 +382,17 @@ func aipStandardCreateInfo(m *Method) *AIPStandardSampleInfo {
391382

392383
resourceIDField := findResourceIDField(m.InputType, maybeSingular)
393384

394-
info := &AIPStandardSampleInfo{
395-
SampleFunctionParameters: []string{"parent"},
396-
InitFieldsFromParameter: []*SampleParameterInit{
397-
{Field: parentField, ParameterName: "parent"},
398-
},
399-
InitFieldsFromMessage: []*SampleMessageInit{
400-
{Field: resourceField},
401-
},
385+
info := &SampleInfo{
386+
ResourceNameField: parentField,
387+
MessageField: resourceField,
402388
}
403389
if resourceIDField != nil {
404-
info.InitFieldsFromStringLiteral = []*Field{resourceIDField}
390+
info.ResourceIDField = resourceIDField
405391
}
406392
return info
407393
}
408394

409-
func aipStandardUpdateInfo(m *Method) *AIPStandardSampleInfo {
395+
func aipStandardUpdateInfo(m *Method) *SampleInfo {
410396
if (!m.IsSimple && !m.IsLRO) || m.InputType == nil || m.ReturnsEmpty {
411397
return nil
412398
}
@@ -443,16 +429,13 @@ func aipStandardUpdateInfo(m *Method) *AIPStandardSampleInfo {
443429
}
444430
}
445431

446-
return &AIPStandardSampleInfo{
447-
SampleFunctionParameters: []string{"name"},
448-
InitFieldsFromMessage: []*SampleMessageInit{
449-
{Field: resourceField, ParameterName: "name"},
450-
},
432+
return &SampleInfo{
433+
MessageField: resourceField,
451434
UpdateMaskField: updateMaskField,
452435
}
453436
}
454437

455-
func aipStandardListInfo(m *Method) *AIPStandardSampleInfo {
438+
func aipStandardListInfo(m *Method) *SampleInfo {
456439
if !m.IsList || m.InputType == nil {
457440
return nil
458441
}
@@ -482,11 +465,8 @@ func aipStandardListInfo(m *Method) *AIPStandardSampleInfo {
482465
return nil
483466
}
484467

485-
return &AIPStandardSampleInfo{
486-
SampleFunctionParameters: []string{"parent"},
487-
InitFieldsFromParameter: []*SampleParameterInit{
488-
{Field: parentField, ParameterName: "parent"},
489-
},
468+
return &SampleInfo{
469+
ResourceNameField: parentField,
490470
}
491471
}
492472

0 commit comments

Comments
 (0)