github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/fgs/v2/versions/requests.go (about) 1 package versions 2 3 import ( 4 "github.com/chnsz/golangsdk" 5 "github.com/chnsz/golangsdk/pagination" 6 ) 7 8 // CreateOpts is the structure that used to create a release version under specified function. 9 type CreateOpts struct { 10 // Function URN to which the version belongs. 11 FunctionUrn string `json:"-" required:"true"` 12 // The MD5 value. 13 Digest string `json:"digest,omitempty"` 14 // The name of the release version. 15 Version string `json:"version,omitempty"` 16 // The description of the release version. 17 Description string `json:"description,omitempty"` 18 } 19 20 var requestOpts = golangsdk.RequestOpts{ 21 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, 22 } 23 24 // Create is a method to create version using given parameters. 25 func Create(client *golangsdk.ServiceClient, opts CreateOpts) (*Version, error) { 26 b, err := golangsdk.BuildRequestBody(opts, "") 27 if err != nil { 28 return nil, err 29 } 30 31 var r Version 32 _, err = client.Post(rootURL(client, opts.FunctionUrn), b, &r, &golangsdk.RequestOpts{ 33 MoreHeaders: requestOpts.MoreHeaders, 34 }) 35 return &r, err 36 } 37 38 // ListOpts is the structure that used to query function version list. 39 type ListOpts struct { 40 // Function URN. 41 FunctionUrn string `json:"-" required:"true"` 42 // The current query index. 43 Marker int `q:"marker"` 44 // Maximum number of functions to obtain in a request. 45 MaxItems int `q:"maxitems"` 46 } 47 48 // List is a method to query the list of the function versions using given parameters. 49 func List(client *golangsdk.ServiceClient, opts ListOpts) ([]Version, error) { 50 query, err := golangsdk.BuildQueryString(opts) 51 if err != nil { 52 return nil, err 53 } 54 url := rootURL(client, opts.FunctionUrn) + query.String() 55 pages, err := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { 56 p := VersionPage{pagination.MarkerPageBase{PageResult: r}} 57 p.MarkerPageBase.Owner = p 58 return p 59 }).AllPages() 60 61 if err != nil { 62 return nil, err 63 } 64 pageInfo, err := extractPageInfo(pages) 65 if err != nil { 66 return nil, err 67 } 68 return pageInfo.Versions, nil 69 }