1package entities 2 3import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 "github.com/Azure/go-autorest/autorest" 9 "github.com/Azure/go-autorest/autorest/azure" 10 "github.com/Azure/go-autorest/autorest/validation" 11 "github.com/tombuildsstuff/giovanni/storage/internal/endpoints" 12) 13 14type GetEntityInput struct { 15 PartitionKey string 16 RowKey string 17 18 // The Level of MetaData which should be returned 19 MetaDataLevel MetaDataLevel 20} 21 22type GetEntityResult struct { 23 autorest.Response 24 25 Entity map[string]interface{} 26} 27 28// Get queries entities in a table and includes the $filter and $select options. 29func (client Client) Get(ctx context.Context, accountName, tableName string, input GetEntityInput) (result GetEntityResult, err error) { 30 if accountName == "" { 31 return result, validation.NewError("entities.Client", "Get", "`accountName` cannot be an empty string.") 32 } 33 if tableName == "" { 34 return result, validation.NewError("entities.Client", "Get", "`tableName` cannot be an empty string.") 35 } 36 if input.PartitionKey == "" { 37 return result, validation.NewError("entities.Client", "Get", "`input.PartitionKey` cannot be an empty string.") 38 } 39 if input.RowKey == "" { 40 return result, validation.NewError("entities.Client", "Get", "`input.RowKey` cannot be an empty string.") 41 } 42 43 req, err := client.GetPreparer(ctx, accountName, tableName, input) 44 if err != nil { 45 err = autorest.NewErrorWithError(err, "entities.Client", "Get", nil, "Failure preparing request") 46 return 47 } 48 49 resp, err := client.GetSender(req) 50 if err != nil { 51 result.Response = autorest.Response{Response: resp} 52 err = autorest.NewErrorWithError(err, "entities.Client", "Get", resp, "Failure sending request") 53 return 54 } 55 56 result, err = client.GetResponder(resp) 57 if err != nil { 58 err = autorest.NewErrorWithError(err, "entities.Client", "Get", resp, "Failure responding to request") 59 return 60 } 61 62 return 63} 64 65// GetPreparer prepares the Get request. 66func (client Client) GetPreparer(ctx context.Context, accountName, tableName string, input GetEntityInput) (*http.Request, error) { 67 68 pathParameters := map[string]interface{}{ 69 "tableName": autorest.Encode("path", tableName), 70 "partitionKey": autorest.Encode("path", input.PartitionKey), 71 "rowKey": autorest.Encode("path", input.RowKey), 72 } 73 74 headers := map[string]interface{}{ 75 "x-ms-version": APIVersion, 76 "Accept": fmt.Sprintf("application/json;odata=%s", input.MetaDataLevel), 77 "DataServiceVersion": "3.0;NetFx", 78 "MaxDataServiceVersion": "3.0;NetFx", 79 } 80 81 preparer := autorest.CreatePreparer( 82 autorest.AsGet(), 83 autorest.WithBaseURL(endpoints.GetTableEndpoint(client.BaseURI, accountName)), 84 autorest.WithPathParameters("/{tableName}(PartitionKey='{partitionKey}',RowKey='{rowKey}')", pathParameters), 85 autorest.WithHeaders(headers)) 86 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 87} 88 89// GetSender sends the Get request. The method will close the 90// http.Response Body if it receives an error. 91func (client Client) GetSender(req *http.Request) (*http.Response, error) { 92 return autorest.SendWithSender(client, req, 93 azure.DoRetryWithRegistration(client.Client)) 94} 95 96// GetResponder handles the response to the Get request. The method always 97// closes the http.Response Body. 98func (client Client) GetResponder(resp *http.Response) (result GetEntityResult, err error) { 99 err = autorest.Respond( 100 resp, 101 client.ByInspecting(), 102 azure.WithErrorUnlessStatusCode(http.StatusOK), 103 autorest.ByUnmarshallingJSON(&result.Entity), 104 autorest.ByClosing()) 105 result.Response = autorest.Response{Response: resp} 106 107 return 108} 109