// doc2basicResource returns the resource info represented by the doc. func doc2basicResource(doc resourceDoc) (resource.Resource, error) { var res resource.Resource resType, err := charmresource.ParseType(doc.Type) if err != nil { return res, errors.Annotate(err, "got invalid data from DB") } origin, err := charmresource.ParseOrigin(doc.Origin) if err != nil { return res, errors.Annotate(err, "got invalid data from DB") } fp, err := resource.DeserializeFingerprint(doc.Fingerprint) if err != nil { return res, errors.Annotate(err, "got invalid data from DB") } res = resource.Resource{ Resource: charmresource.Resource{ Meta: charmresource.Meta{ Name: doc.Name, Type: resType, Path: doc.Path, Description: doc.Description, }, Origin: origin, Revision: doc.Revision, Fingerprint: fp, Size: doc.Size, }, ID: doc.ID, PendingID: doc.PendingID, ServiceID: doc.ServiceID, Username: doc.Username, Timestamp: doc.Timestamp, } if err := res.Validate(); err != nil { return res, errors.Annotate(err, "got invalid data from DB") } return res, nil }
// API2CharmResource converts an API CharmResource struct into // a charm resource. func API2CharmResource(apiInfo CharmResource) (charmresource.Resource, error) { var res charmresource.Resource rtype, err := charmresource.ParseType(apiInfo.Type) if err != nil { return res, errors.Trace(err) } origin, err := charmresource.ParseOrigin(apiInfo.Origin) if err != nil { return res, errors.Trace(err) } fp, err := resource.DeserializeFingerprint(apiInfo.Fingerprint) if err != nil { return res, errors.Trace(err) } res = charmresource.Resource{ Meta: charmresource.Meta{ Name: apiInfo.Name, Type: rtype, Path: apiInfo.Path, Description: apiInfo.Description, }, Origin: origin, Revision: apiInfo.Revision, Fingerprint: fp, Size: apiInfo.Size, } if err := res.Validate(); err != nil { return res, errors.Trace(err) } return res, nil }