1// Code generated by smithy-go-codegen DO NOT EDIT. 2 3package iotsitewise 4 5import ( 6 "context" 7 "fmt" 8 awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" 9 "github.com/aws/aws-sdk-go-v2/aws/signer/v4" 10 "github.com/aws/aws-sdk-go-v2/service/iotsitewise/types" 11 "github.com/aws/smithy-go/middleware" 12 smithyhttp "github.com/aws/smithy-go/transport/http" 13) 14 15// Retrieves a paginated list of asset relationships for an asset. You can use this 16// operation to identify an asset's root asset and all associated assets between 17// that asset and its root. 18func (c *Client) ListAssetRelationships(ctx context.Context, params *ListAssetRelationshipsInput, optFns ...func(*Options)) (*ListAssetRelationshipsOutput, error) { 19 if params == nil { 20 params = &ListAssetRelationshipsInput{} 21 } 22 23 result, metadata, err := c.invokeOperation(ctx, "ListAssetRelationships", params, optFns, addOperationListAssetRelationshipsMiddlewares) 24 if err != nil { 25 return nil, err 26 } 27 28 out := result.(*ListAssetRelationshipsOutput) 29 out.ResultMetadata = metadata 30 return out, nil 31} 32 33type ListAssetRelationshipsInput struct { 34 35 // The ID of the asset. 36 // 37 // This member is required. 38 AssetId *string 39 40 // The type of traversal to use to identify asset relationships. Choose the 41 // following option: 42 // 43 // * PATH_TO_ROOT – Identify the asset's parent assets up to the 44 // root asset. The asset that you specify in assetId is the first result in the 45 // list of assetRelationshipSummaries, and the root asset is the last result. 46 // 47 // This member is required. 48 TraversalType types.TraversalType 49 50 // The maximum number of results to be returned per paginated request. 51 MaxResults *int32 52 53 // The token to be used for the next set of paginated results. 54 NextToken *string 55} 56 57type ListAssetRelationshipsOutput struct { 58 59 // A list that summarizes each asset relationship. 60 // 61 // This member is required. 62 AssetRelationshipSummaries []types.AssetRelationshipSummary 63 64 // The token for the next set of results, or null if there are no additional 65 // results. 66 NextToken *string 67 68 // Metadata pertaining to the operation's result. 69 ResultMetadata middleware.Metadata 70} 71 72func addOperationListAssetRelationshipsMiddlewares(stack *middleware.Stack, options Options) (err error) { 73 err = stack.Serialize.Add(&awsRestjson1_serializeOpListAssetRelationships{}, middleware.After) 74 if err != nil { 75 return err 76 } 77 err = stack.Deserialize.Add(&awsRestjson1_deserializeOpListAssetRelationships{}, middleware.After) 78 if err != nil { 79 return err 80 } 81 if err = addSetLoggerMiddleware(stack, options); err != nil { 82 return err 83 } 84 if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { 85 return err 86 } 87 if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { 88 return err 89 } 90 if err = addResolveEndpointMiddleware(stack, options); err != nil { 91 return err 92 } 93 if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { 94 return err 95 } 96 if err = addRetryMiddlewares(stack, options); err != nil { 97 return err 98 } 99 if err = addHTTPSignerV4Middleware(stack, options); err != nil { 100 return err 101 } 102 if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { 103 return err 104 } 105 if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { 106 return err 107 } 108 if err = addClientUserAgent(stack); err != nil { 109 return err 110 } 111 if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil { 112 return err 113 } 114 if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil { 115 return err 116 } 117 if err = addEndpointPrefix_opListAssetRelationshipsMiddleware(stack); err != nil { 118 return err 119 } 120 if err = addOpListAssetRelationshipsValidationMiddleware(stack); err != nil { 121 return err 122 } 123 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opListAssetRelationships(options.Region), middleware.Before); err != nil { 124 return err 125 } 126 if err = addRequestIDRetrieverMiddleware(stack); err != nil { 127 return err 128 } 129 if err = addResponseErrorMiddleware(stack); err != nil { 130 return err 131 } 132 if err = addRequestResponseLogging(stack, options); err != nil { 133 return err 134 } 135 return nil 136} 137 138type endpointPrefix_opListAssetRelationshipsMiddleware struct { 139} 140 141func (*endpointPrefix_opListAssetRelationshipsMiddleware) ID() string { 142 return "EndpointHostPrefix" 143} 144 145func (m *endpointPrefix_opListAssetRelationshipsMiddleware) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( 146 out middleware.SerializeOutput, metadata middleware.Metadata, err error, 147) { 148 if smithyhttp.GetHostnameImmutable(ctx) || smithyhttp.IsEndpointHostPrefixDisabled(ctx) { 149 return next.HandleSerialize(ctx, in) 150 } 151 152 req, ok := in.Request.(*smithyhttp.Request) 153 if !ok { 154 return out, metadata, fmt.Errorf("unknown transport type %T", in.Request) 155 } 156 157 req.URL.Host = "model." + req.URL.Host 158 159 return next.HandleSerialize(ctx, in) 160} 161func addEndpointPrefix_opListAssetRelationshipsMiddleware(stack *middleware.Stack) error { 162 return stack.Serialize.Insert(&endpointPrefix_opListAssetRelationshipsMiddleware{}, `OperationSerializer`, middleware.After) 163} 164 165// ListAssetRelationshipsAPIClient is a client that implements the 166// ListAssetRelationships operation. 167type ListAssetRelationshipsAPIClient interface { 168 ListAssetRelationships(context.Context, *ListAssetRelationshipsInput, ...func(*Options)) (*ListAssetRelationshipsOutput, error) 169} 170 171var _ ListAssetRelationshipsAPIClient = (*Client)(nil) 172 173// ListAssetRelationshipsPaginatorOptions is the paginator options for 174// ListAssetRelationships 175type ListAssetRelationshipsPaginatorOptions struct { 176 // The maximum number of results to be returned per paginated request. 177 Limit int32 178 179 // Set to true if pagination should stop if the service returns a pagination token 180 // that matches the most recent token provided to the service. 181 StopOnDuplicateToken bool 182} 183 184// ListAssetRelationshipsPaginator is a paginator for ListAssetRelationships 185type ListAssetRelationshipsPaginator struct { 186 options ListAssetRelationshipsPaginatorOptions 187 client ListAssetRelationshipsAPIClient 188 params *ListAssetRelationshipsInput 189 nextToken *string 190 firstPage bool 191} 192 193// NewListAssetRelationshipsPaginator returns a new ListAssetRelationshipsPaginator 194func NewListAssetRelationshipsPaginator(client ListAssetRelationshipsAPIClient, params *ListAssetRelationshipsInput, optFns ...func(*ListAssetRelationshipsPaginatorOptions)) *ListAssetRelationshipsPaginator { 195 if params == nil { 196 params = &ListAssetRelationshipsInput{} 197 } 198 199 options := ListAssetRelationshipsPaginatorOptions{} 200 if params.MaxResults != nil { 201 options.Limit = *params.MaxResults 202 } 203 204 for _, fn := range optFns { 205 fn(&options) 206 } 207 208 return &ListAssetRelationshipsPaginator{ 209 options: options, 210 client: client, 211 params: params, 212 firstPage: true, 213 } 214} 215 216// HasMorePages returns a boolean indicating whether more pages are available 217func (p *ListAssetRelationshipsPaginator) HasMorePages() bool { 218 return p.firstPage || p.nextToken != nil 219} 220 221// NextPage retrieves the next ListAssetRelationships page. 222func (p *ListAssetRelationshipsPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*ListAssetRelationshipsOutput, error) { 223 if !p.HasMorePages() { 224 return nil, fmt.Errorf("no more pages available") 225 } 226 227 params := *p.params 228 params.NextToken = p.nextToken 229 230 var limit *int32 231 if p.options.Limit > 0 { 232 limit = &p.options.Limit 233 } 234 params.MaxResults = limit 235 236 result, err := p.client.ListAssetRelationships(ctx, ¶ms, optFns...) 237 if err != nil { 238 return nil, err 239 } 240 p.firstPage = false 241 242 prevToken := p.nextToken 243 p.nextToken = result.NextToken 244 245 if p.options.StopOnDuplicateToken && prevToken != nil && p.nextToken != nil && *prevToken == *p.nextToken { 246 p.nextToken = nil 247 } 248 249 return result, nil 250} 251 252func newServiceMetadataMiddleware_opListAssetRelationships(region string) *awsmiddleware.RegisterServiceMetadata { 253 return &awsmiddleware.RegisterServiceMetadata{ 254 Region: region, 255 ServiceID: ServiceID, 256 SigningName: "iotsitewise", 257 OperationName: "ListAssetRelationships", 258 } 259} 260