cleanrooms

package
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 3, 2026 License: MIT Imports: 22 Imported by: 0

README

Clean Rooms

Parity grade: A · SDK aws-sdk-go-v2/service/cleanrooms@v1.48.0 · last audited 2026-07-25 (HEAD)

Coverage

Metric Value
Feature families 14 (13 ok, 1 partial)
Known gaps 6
Deferred items 2
Resource leaks clean
Known gaps
  • ListPrivacyBudgets / ListCollaborationPrivacyBudgets always return an empty budget list. This matches the real API's contract shape (no CreatePrivacyBudget op exists; budgets are server-computed from differential-privacy query usage against a PrivacyBudgetTemplate) but this backend does not model DP budget consumption, so the list is always empty rather than reflecting real usage. Deferred -- would need a differential-privacy accounting model, out of scope for a wire-parity sweep.
  • PreviewPrivacyImpact returns a fixed empty aggregationCount shape regardless of input parameters -- real AWS computes an actual privacy-impact estimate. Same DP-accounting gap as above.
  • Collaboration.Members is kept on the wire (json:"members") even though it is not a real field on the real Collaboration/CreateCollaborationOutput/GetCollaborationOutput/UpdateCollaborationOutput shape (confirmed against awsRestjson1_deserializeDocumentCollaboration -- members only come from ListMembers). This is a deliberate exception, not an oversight: Members is the only backing store for ListMembers/DeleteMember and has no separate persisted representation the way tagsByArn has for Tags, so a json:"-" tag would silently lose every collaboration's member list across a service restart (store.Table's Snapshot/Restore round-trips through this same struct tag). Real AWS SDK/Terraform clients tolerate the extra key (every deserializer in this service ends its field switch with a default case that discards unrecognized keys), so this trades a harmless wire non-canonicality for correct state persistence. Properly removing it requires moving Members to its own store.Table (like tagsByArn), which is deferred.
  • CollaborationChangeRequest's changes field is stored/returned as a generic []map[string]any pass-through (matching the convention used elsewhere for Policy/TableReference/etc unions) rather than a strongly-typed Change{Specification,SpecificationType,Types} union, and committing a change request does not actually apply the change to the parent collaboration's state (e.g. a MEMBER change's effects are not reflected on Collaboration/Membership). The state machine (PENDING/APPROVED/DENIED/CANCELLED/COMMITTED) is real; the semantic effect of a committed change is not modeled. Deferred.
  • Collaboration's optional analyticsEngine/dataEncryptionMetadata/allowedResultRegions/autoApprovedChangeTypes/isMetricsEnabled/jobLogStatus fields, Membership's isMetricsEnabled/jobLogStatus/defaultJobResultConfiguration/mlMemberAbilities, ProtectedQuery/Job's differentialPrivacy/receiverConfigurations/queryComputePayerAccountId/jobComputePayerAccountId, AnalysisTemplate's errorMessageConfiguration/sourceMetadata/syntheticDataParameters/validations/isSyntheticData, and ConfiguredTable(Summary)'s selectedAnalysisMethods are real optional SDK fields not modeled by this backend (never populated). None are invented -- they are simply omitted (correct per the JSON protocol: an absent optional field is valid), not stubbed with fake values. Deferred as lower-value completeness work.
  • IntermediateTable's schema/childResources/tableDependencies (all real, optional fields) are never populated, matching the same 'omit, don't fabricate' convention as the gap above: schema requires actually executing the stored populationAnalysisConfiguration query to learn real column types (this backend has no SQL engine); childResources/tableDependencies require a full base-table-dependency graph across other members' configured tables, which this backend does not build. UpdateIntermediateTable's real 'columns' input (retype existing schema columns) is not modeled for the same reason -- there is no real column data to retype. DisallowIntermediateTable's includeDescendants=true cascade is accepted on the wire but is a documented no-op for the same underlying reason (no dependency graph to cascade through) -- the direct-name-match status transition it performs is real, only the cascade is deferred.
Deferred
  • Schema creation/projection from ConfiguredTable+ConfiguredTableAssociation state (pre-existing gap noted in persistence_test.go; not touched this pass, out of scope)
  • SchemaAnalysisRule's real wire shape (types.AnalysisRule, a deeper union) is not modeled precisely; unreachable in practice since schemas are never created (see Schema/SchemaAnalysisRule family note)

More

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotFound      = awserr.New("ResourceNotFoundException", awserr.ErrNotFound)
	ErrAlreadyExists = awserr.New("ConflictException", awserr.ErrAlreadyExists)
	ErrValidation    = awserr.New("ValidationException", awserr.ErrInvalidParameter)
	// ErrConflict indicates a resource state conflict, e.g. attempting to cancel a
	// protected query/job that has already reached a terminal status. Maps to the
	// same wire error (ConflictException/409) as ErrAlreadyExists but is kept
	// distinct so callers/tests can express "wrong state" independently of
	// "duplicate resource".
	ErrConflict = awserr.New("ConflictException", awserr.ErrConflict)
)
View Source
var ErrNilAppContext = errors.New("nil AppContext passed to CleanRooms Provider.Init")

ErrNilAppContext is returned by Init when a nil AppContext is passed.

Functions

This section is empty.

Types

type AnalysisTemplate

type AnalysisTemplate struct {
	Source                     map[string]any    `json:"source,omitempty"`
	Tags                       map[string]string `json:"-"`
	Schema                     map[string]any    `json:"schema,omitempty"`
	AnalysisTemplateIdentifier string            `json:"-"`
	Format                     string            `json:"format,omitempty"`
	MembershipArn              string            `json:"membershipArn"`
	Name                       string            `json:"name"`
	Description                string            `json:"description,omitempty"`
	CollaborationIdentifier    string            `json:"-"`
	CollaborationArn           string            `json:"collaborationArn"`
	MembershipIdentifier       string            `json:"-"`
	Arn                        string            `json:"arn"`
	CollaborationID            string            `json:"collaborationId"`
	MembershipID               string            `json:"membershipId"`
	ID                         string            `json:"id"`
	AnalysisParameters         []map[string]any  `json:"analysisParameters,omitempty"`
	UpdateTime                 float64           `json:"updateTime,omitempty"`
	CreateTime                 float64           `json:"createTime,omitempty"`
}

AnalysisTemplate is the wire shape for CreateAnalysisTemplate/Get/ UpdateAnalysisTemplate (Summary is its List shape). Verified against awsRestjson1_deserializeDocumentAnalysisTemplate(Summary): real keys use "id"/"collaborationId"/"membershipId", never the "*Identifier" forms (request-parameter-only names). errorMessageConfiguration, sourceMetadata, syntheticDataParameters, validations (full-resource) and isSyntheticData (summary) are not modeled (deferred, see PARITY.md).

type AnalysisTemplateSummary

type AnalysisTemplateSummary struct {
	AnalysisTemplateIdentifier string  `json:"-"`
	Arn                        string  `json:"arn"`
	CollaborationArn           string  `json:"collaborationArn"`
	CollaborationIdentifier    string  `json:"-"`
	MembershipIdentifier       string  `json:"-"`
	MembershipArn              string  `json:"membershipArn"`
	Name                       string  `json:"name"`
	ID                         string  `json:"id"`
	MembershipID               string  `json:"membershipId"`
	CollaborationID            string  `json:"collaborationId"`
	CreateTime                 float64 `json:"createTime,omitempty"`
	UpdateTime                 float64 `json:"updateTime,omitempty"`
}

type BatchError

type BatchError struct {
	Arn     string `json:"arn,omitempty"`
	Name    string `json:"name,omitempty"`
	Code    string `json:"code"`
	Message string `json:"message"`
}

type Collaboration

type Collaboration struct {
	Tags                    map[string]string `json:"-"`
	CollaborationIdentifier string            `json:"-"`
	ID                      string            `json:"id"`
	Arn                     string            `json:"arn"`
	Name                    string            `json:"name"`
	Description             string            `json:"description,omitempty"`
	CreatorAccountID        string            `json:"creatorAccountId"`
	CreatorDisplayName      string            `json:"creatorDisplayName"`
	MemberStatus            string            `json:"memberStatus"`
	QueryLogStatus          string            `json:"queryLogStatus,omitempty"`
	// MembershipArn/MembershipID are the caller's own membership within this
	// collaboration -- real AWS auto-creates a membership for the creator at
	// CreateCollaboration time (see InMemoryBackend.CreateCollaboration).
	MembershipArn   string   `json:"membershipArn,omitempty"`
	MembershipID    string   `json:"membershipId,omitempty"`
	MemberAbilities []string `json:"-"`
	// Members is the real backing store for ListMembers/DeleteMember (see
	// InMemoryBackend.ListMembers/DeleteMember) and has no separate
	// persisted representation the way tagsByArn does for Tags, so unlike
	// every other invented field cleaned up in this pass it keeps a real
	// (non "-") json tag: store.Table's Snapshot/Restore round-trips
	// through this exact tag, and a json:"-" here would silently lose every
	// collaboration's member list across a restart. A real AWS SDK/
	// Terraform client tolerates the extra "members" key on
	// Create/Get/UpdateCollaboration responses (every deserializer in this
	// service ends its field switch with a default case that discards
	// unrecognized keys), so this is a deliberate, documented exception,
	// not a silent wire violation -- moving Members to its own
	// store.Table (like tagsByArn) to fully remove it from the wire is
	// deferred, see PARITY.md.
	Members    []*MemberSummary `json:"members,omitempty"`
	CreateTime float64          `json:"createTime,omitempty"`
	UpdateTime float64          `json:"updateTime,omitempty"`
}

Collaboration is the wire shape returned by CreateCollaboration/ GetCollaboration/UpdateCollaboration. Verified against awsRestjson1_deserializeDocumentCollaboration: real keys are allowedResultRegions, analyticsEngine, arn, autoApprovedChangeTypes, createTime, creatorAccountId, creatorDisplayName, dataEncryptionMetadata, description, id, isMetricsEnabled, jobLogStatus, membershipArn, membershipId, memberStatus, name, queryLogStatus, updateTime.

There is NO "collaborationIdentifier", "memberAbilities", "members", or "tags" key on this shape in the real API -- members come only from ListMembers, tags only from ListTagsForResource, and "collaborationIdentifier" is exclusively a *request* parameter name (used by Get/Update/Delete/etc, see the handler_*.go request DTOs), never a response field. CollaborationIdentifier/MemberAbilities/Members/Tags are kept as Go-only bookkeeping fields (json:"-") since they back real internal behavior (composite-key derivation, ListMembers/DeleteMember backing store, tagsByArn population at create time) -- only their wire presence was invented.

type CollaborationChangeRequest

type CollaborationChangeRequest struct {
	Details                 map[string]any   `json:"-"`
	Approvals               map[string]any   `json:"approvals,omitempty"`
	CollaborationArn        string           `json:"-"`
	ChangeRequestIdentifier string           `json:"-"`
	CollaborationIdentifier string           `json:"-"`
	CollaborationID         string           `json:"collaborationId"`
	Status                  string           `json:"status"`
	Type                    string           `json:"-"`
	ID                      string           `json:"id"`
	Changes                 []map[string]any `json:"changes,omitempty"`
	CreateTime              float64          `json:"createTime,omitempty"`
	UpdateTime              float64          `json:"updateTime,omitempty"`
	IsAutoApproved          bool             `json:"isAutoApproved"`
}

CollaborationChangeRequest verified against awsRestjson1_deserializeDocumentCollaborationChangeRequest: real keys are approvals, changes, collaborationId, createTime, id, isAutoApproved, status, updateTime. There is NO "changeRequestIdentifier", "collaborationIdentifier", "collaborationArn", "type", or "details" key in the real API -- CreateCollaborationChangeRequestInput takes a `changes` array of {specification, specificationType} objects (not a free-form "type"+"details" pair), which this backend stores as a generic []map[string]any pass-through, matching the convention used for other complex nested unions in this service (Policy, TableReference, etc). ChangeRequestIdentifier/CollaborationArn/Type are kept as Go-only bookkeeping (json:"-").

type CollaborationSummary

type CollaborationSummary struct {
	CollaborationIdentifier string  `json:"-"`
	ID                      string  `json:"id"`
	Arn                     string  `json:"arn"`
	Name                    string  `json:"name"`
	CreatorAccountID        string  `json:"creatorAccountId"`
	CreatorDisplayName      string  `json:"creatorDisplayName"`
	MemberStatus            string  `json:"memberStatus"`
	MembershipArn           string  `json:"membershipArn,omitempty"`
	MembershipID            string  `json:"membershipId,omitempty"`
	CreateTime              float64 `json:"createTime,omitempty"`
	UpdateTime              float64 `json:"updateTime,omitempty"`
}

CollaborationSummary is the wire shape returned by ListCollaborations. Verified against awsRestjson1_deserializeDocumentCollaborationSummary: real keys are analyticsEngine, arn, createTime, creatorAccountId, creatorDisplayName, id, membershipArn, membershipId, memberStatus, name, updateTime. No "collaborationIdentifier" key (see Collaboration doc).

type ConfiguredAudienceModelAssociation

type ConfiguredAudienceModelAssociation struct {
	Tags                                         map[string]string `json:"-"`
	Description                                  string            `json:"description,omitempty"`
	ConfiguredAudienceModelArn                   string            `json:"configuredAudienceModelArn"`
	CollaborationIdentifier                      string            `json:"-"`
	MembershipArn                                string            `json:"membershipArn"`
	MembershipIdentifier                         string            `json:"-"`
	ConfiguredAudienceModelAssociationIdentifier string            `json:"-"`
	CollaborationArn                             string            `json:"collaborationArn"`
	CollaborationID                              string            `json:"collaborationId"`
	Name                                         string            `json:"name"`
	MembershipID                                 string            `json:"membershipId"`
	Arn                                          string            `json:"arn"`
	ID                                           string            `json:"id"`
	CreateTime                                   float64           `json:"createTime,omitempty"`
	UpdateTime                                   float64           `json:"updateTime,omitempty"`
	ManageResourcePolicies                       bool              `json:"manageResourcePolicies"`
}

ConfiguredAudienceModelAssociation is the wire shape for CreateConfiguredAudienceModelAssociation (Summary is its List shape). Verified against awsRestjson1_deserializeDocumentConfiguredAudienceModelAssociation (Summary): real keys use "id"/"collaborationId"/"membershipId", never the "*Identifier" forms. Summary lacks only manageResourcePolicies vs the full resource.

type ConfiguredAudienceModelAssociationSummary

type ConfiguredAudienceModelAssociationSummary struct {
	ConfiguredAudienceModelAssociationIdentifier string  `json:"-"`
	Arn                                          string  `json:"arn"`
	CollaborationArn                             string  `json:"collaborationArn"`
	CollaborationIdentifier                      string  `json:"-"`
	MembershipArn                                string  `json:"membershipArn"`
	MembershipIdentifier                         string  `json:"-"`
	Name                                         string  `json:"name"`
	ID                                           string  `json:"id"`
	MembershipID                                 string  `json:"membershipId"`
	CollaborationID                              string  `json:"collaborationId"`
	CreateTime                                   float64 `json:"createTime,omitempty"`
	UpdateTime                                   float64 `json:"updateTime,omitempty"`
}

type ConfiguredTable

type ConfiguredTable struct {
	TableReference            map[string]any    `json:"tableReference,omitempty"`
	Tags                      map[string]string `json:"-"`
	ConfiguredTableIdentifier string            `json:"-"`
	Arn                       string            `json:"arn"`
	Name                      string            `json:"name"`
	Description               string            `json:"description,omitempty"`
	AnalysisMethod            string            `json:"analysisMethod,omitempty"`
	ID                        string            `json:"id"`
	AllowedColumns            []string          `json:"allowedColumns,omitempty"`
	AnalysisRuleTypes         []string          `json:"analysisRuleTypes,omitempty"`
	CreateTime                float64           `json:"createTime,omitempty"`
	UpdateTime                float64           `json:"updateTime,omitempty"`
}

ConfiguredTable is the wire shape for CreateConfiguredTable/GetConfiguredTable/ UpdateConfiguredTable (ConfiguredTableSummary is its List shape). Verified against awsRestjson1_deserializeDocumentConfiguredTable(Summary): real keys use "id", never "configuredTableIdentifier" (request-parameter-only name). selectedAnalysisMethods is not modeled (deferred, see PARITY.md).

type ConfiguredTableAnalysisRule

type ConfiguredTableAnalysisRule struct {
	Policy                    map[string]any `json:"policy,omitempty"`
	ConfiguredTableIdentifier string         `json:"-"`
	ConfiguredTableArn        string         `json:"configuredTableArn"`
	Type                      string         `json:"type"`
	ConfiguredTableID         string         `json:"configuredTableId"`
	CreateTime                float64        `json:"createTime,omitempty"`
	UpdateTime                float64        `json:"updateTime,omitempty"`
}

ConfiguredTableAnalysisRule verified against awsRestjson1_deserializeDocumentConfiguredTableAnalysisRule: real keys are configuredTableArn, configuredTableId, createTime, policy, type, updateTime. No standalone "id" and no "configuredTableIdentifier".

type ConfiguredTableAssociation

type ConfiguredTableAssociation struct {
	Tags                                 map[string]string `json:"-"`
	RoleArn                              string            `json:"roleArn,omitempty"`
	Name                                 string            `json:"name"`
	MembershipArn                        string            `json:"membershipArn"`
	ConfiguredTableIdentifier            string            `json:"-"`
	ConfiguredTableArn                   string            `json:"configuredTableArn"`
	ConfiguredTableAssociationIdentifier string            `json:"-"`
	MembershipIdentifier                 string            `json:"-"`
	ConfiguredTableID                    string            `json:"configuredTableId"`
	Description                          string            `json:"description,omitempty"`
	MembershipID                         string            `json:"membershipId"`
	Arn                                  string            `json:"arn"`
	ID                                   string            `json:"id"`
	AnalysisRuleTypes                    []string          `json:"analysisRuleTypes,omitempty"`
	UpdateTime                           float64           `json:"updateTime,omitempty"`
	CreateTime                           float64           `json:"createTime,omitempty"`
}

ConfiguredTableAssociation is the wire shape for CreateConfiguredTableAssociation/ Get/UpdateConfiguredTableAssociation (Summary is its List shape). Verified against awsRestjson1_deserializeDocumentConfiguredTableAssociation(Summary): real keys use "id"/"configuredTableId"/"membershipId", never the "*Identifier" forms (request-parameter-only names). Summary additionally has no configuredTableArn/description/roleArn (full-resource-only fields).

type ConfiguredTableAssociationAnalysisRule

type ConfiguredTableAssociationAnalysisRule struct {
	Policy                               map[string]any `json:"policy,omitempty"`
	ConfiguredTableAssociationIdentifier string         `json:"configuredTableAssociationId"`
	ConfiguredTableAssociationArn        string         `json:"configuredTableAssociationArn"`
	MembershipIdentifier                 string         `json:"membershipIdentifier"`
	MembershipArn                        string         `json:"-"`
	Type                                 string         `json:"type"`
	CreateTime                           float64        `json:"createTime,omitempty"`
	UpdateTime                           float64        `json:"updateTime,omitempty"`
}

ConfiguredTableAssociationAnalysisRule verified against awsRestjson1_deserializeDocumentConfiguredTableAssociationAnalysisRule: real keys are configuredTableAssociationArn, configuredTableAssociationId (NOT "...Identifier"), createTime, membershipIdentifier (this one IS spelled "membershipIdentifier" in the real API -- confirmed against the deserializer, an intentional asymmetry vs every other type in this service), policy, type, updateTime. There is no "membershipArn" key for this specific nested shape (it was previously fabricated here).

type ConfiguredTableAssociationSummary

type ConfiguredTableAssociationSummary struct {
	ConfiguredTableAssociationIdentifier string  `json:"-"`
	Arn                                  string  `json:"arn"`
	MembershipIdentifier                 string  `json:"-"`
	MembershipArn                        string  `json:"membershipArn"`
	ConfiguredTableIdentifier            string  `json:"-"`
	Name                                 string  `json:"name"`
	ID                                   string  `json:"id"`
	MembershipID                         string  `json:"membershipId"`
	ConfiguredTableID                    string  `json:"configuredTableId"`
	CreateTime                           float64 `json:"createTime,omitempty"`
	UpdateTime                           float64 `json:"updateTime,omitempty"`
}

type ConfiguredTableSummary

type ConfiguredTableSummary struct {
	ConfiguredTableIdentifier string   `json:"-"`
	Arn                       string   `json:"arn"`
	Name                      string   `json:"name"`
	AnalysisMethod            string   `json:"analysisMethod,omitempty"`
	ID                        string   `json:"id"`
	AnalysisRuleTypes         []string `json:"analysisRuleTypes,omitempty"`
	CreateTime                float64  `json:"createTime,omitempty"`
	UpdateTime                float64  `json:"updateTime,omitempty"`
}

type Handler

type Handler struct {
	Backend   StorageBackend
	AccountID string
	Region    string
}

Handler handles AWS Clean Rooms HTTP requests.

func NewHandler

func NewHandler(backend StorageBackend) *Handler

NewHandler creates a new Clean Rooms handler.

func (*Handler) ExtractOperation

func (h *Handler) ExtractOperation(c *echo.Context) string

func (*Handler) ExtractResource

func (h *Handler) ExtractResource(c *echo.Context) string

func (*Handler) GetSupportedOperations

func (h *Handler) GetSupportedOperations() []string

func (*Handler) Handler

func (h *Handler) Handler() echo.HandlerFunc

func (*Handler) MatchPriority

func (h *Handler) MatchPriority() int

func (*Handler) Name

func (h *Handler) Name() string

func (*Handler) Reset

func (h *Handler) Reset()

func (*Handler) Restore

func (h *Handler) Restore(ctx context.Context, data []byte) error

Restore implements persistence.Persistable by delegating to the backend.

func (*Handler) RouteMatcher

func (h *Handler) RouteMatcher() service.Matcher

func (*Handler) Snapshot

func (h *Handler) Snapshot(ctx context.Context) []byte

Snapshot implements persistence.Persistable by delegating to the backend. Handler previously had no Snapshot/Restore of its own -- and neither did InMemoryBackend -- so cli.go's generic setupPersistence (which type-asserts the registered service.Registerable, i.e. the Handler, for a Snapshot/Restore pair) never picked CleanRooms up at all: dead wiring, with no persistence underneath it either. This delegation (matching the codecommit/codepipeline/emr/workmail pattern) is what wires CleanRooms into persistence for the first time.

func (*Handler) StartWorker

func (h *Handler) StartWorker(_ context.Context) error

type IDMappingTable

type IDMappingTable struct {
	InputReferenceConfig     map[string]any    `json:"inputReferenceConfig,omitempty"`
	Tags                     map[string]string `json:"-"`
	InputReferenceProperties map[string]any    `json:"inputReferenceProperties,omitempty"`
	IDMappingTableIdentifier string            `json:"-"`
	KmsKeyArn                string            `json:"kmsKeyArn,omitempty"`
	MembershipIdentifier     string            `json:"-"`
	Name                     string            `json:"name"`
	Description              string            `json:"description,omitempty"`
	CollaborationIdentifier  string            `json:"-"`
	CollaborationArn         string            `json:"collaborationArn"`
	MembershipArn            string            `json:"membershipArn"`
	Arn                      string            `json:"arn"`
	CollaborationID          string            `json:"collaborationId"`
	MembershipID             string            `json:"membershipId"`
	ID                       string            `json:"id"`
	UpdateTime               float64           `json:"updateTime,omitempty"`
	CreateTime               float64           `json:"createTime,omitempty"`
}

IDMappingTable is the wire shape for CreateIdMappingTable/GetIdMappingTable (Summary is its List shape). Verified against awsRestjson1_deserializeDocumentIdMappingTable(Summary): real keys use "id"/"collaborationId"/"membershipId", never the "*Identifier" forms. Summary DOES include inputReferenceConfig (unlike some other Summary shapes in this service) but not inputReferenceProperties.

type IDMappingTableSummary

type IDMappingTableSummary struct {
	InputReferenceConfig     map[string]any `json:"inputReferenceConfig,omitempty"`
	IDMappingTableIdentifier string         `json:"-"`
	Arn                      string         `json:"arn"`
	CollaborationArn         string         `json:"collaborationArn"`
	CollaborationIdentifier  string         `json:"-"`
	MembershipArn            string         `json:"membershipArn"`
	MembershipIdentifier     string         `json:"-"`
	Name                     string         `json:"name"`
	ID                       string         `json:"id"`
	MembershipID             string         `json:"membershipId"`
	CollaborationID          string         `json:"collaborationId"`
	CreateTime               float64        `json:"createTime,omitempty"`
	UpdateTime               float64        `json:"updateTime,omitempty"`
}

type IDNamespaceAssociation

type IDNamespaceAssociation struct {
	InputReferenceConfig             map[string]any    `json:"inputReferenceConfig,omitempty"`
	Tags                             map[string]string `json:"-"`
	IDMappingConfig                  map[string]any    `json:"idMappingConfig,omitempty"`
	InputReferenceProperties         map[string]any    `json:"inputReferenceProperties,omitempty"`
	MembershipArn                    string            `json:"membershipArn"`
	MembershipIdentifier             string            `json:"-"`
	Name                             string            `json:"name"`
	Description                      string            `json:"description,omitempty"`
	CollaborationIdentifier          string            `json:"-"`
	IDNamespaceAssociationIdentifier string            `json:"-"`
	CollaborationArn                 string            `json:"collaborationArn"`
	Arn                              string            `json:"arn"`
	ID                               string            `json:"id"`
	MembershipID                     string            `json:"membershipId"`
	CollaborationID                  string            `json:"collaborationId"`
	CreateTime                       float64           `json:"createTime,omitempty"`
	UpdateTime                       float64           `json:"updateTime,omitempty"`
}

IDNamespaceAssociation is the wire shape for CreateIdNamespaceAssociation/Get/ UpdateIdNamespaceAssociation (Summary is its List shape). Verified against awsRestjson1_deserializeDocumentIdNamespaceAssociation(Summary): real keys use "id"/"collaborationId"/"membershipId", never the "*Identifier" forms. Summary includes inputReferenceConfig AND inputReferenceProperties (only idMappingConfig is full-resource-only).

type IDNamespaceAssociationSummary

type IDNamespaceAssociationSummary struct {
	InputReferenceConfig             map[string]any `json:"inputReferenceConfig,omitempty"`
	InputReferenceProperties         map[string]any `json:"inputReferenceProperties,omitempty"`
	IDNamespaceAssociationIdentifier string         `json:"-"`
	Arn                              string         `json:"arn"`
	CollaborationArn                 string         `json:"collaborationArn"`
	CollaborationIdentifier          string         `json:"-"`
	MembershipArn                    string         `json:"membershipArn"`
	MembershipIdentifier             string         `json:"-"`
	Name                             string         `json:"name"`
	ID                               string         `json:"id"`
	MembershipID                     string         `json:"membershipId"`
	CollaborationID                  string         `json:"collaborationId"`
	CreateTime                       float64        `json:"createTime,omitempty"`
	UpdateTime                       float64        `json:"updateTime,omitempty"`
}

type InMemoryBackend

type InMemoryBackend struct {
	// contains filtered or unexported fields
}

InMemoryBackend is the in-memory implementation of StorageBackend.

registry holds every converted resource table directly, including every composite-keyed one (see store_setup.go): each derives its store.Table key entirely from real, already-wire-visible identity field(s) already present on the value type (e.g. ConfiguredTableAnalysisRule carries both ConfiguredTableIdentifier and Type; AnalysisTemplate carries both MembershipIdentifier and its own ID), so plain registry.SnapshotAll/ RestoreAll round-trips every table losslessly with no DTO wrapper needed anywhere -- unlike services/workmail or services/codeartifact, which each hide at least one unexported field behind a DTO. See persistence.go.

tagsByArn is the one field left as a plain (non-store.Table) map: its values are map[string]string, not *T, so there is nothing for store.Table to key on. It is persisted directly (see persistence.go).

func NewInMemoryBackend

func NewInMemoryBackend(accountID, region string) *InMemoryBackend

NewInMemoryBackend creates a new in-memory Clean Rooms backend.

func NewInMemoryBackendWithContext

func NewInMemoryBackendWithContext(_ context.Context, accountID, region string) *InMemoryBackend

NewInMemoryBackendWithContext creates a backend tied to svcCtx (ignored; no lifecycle goroutines).

func (*InMemoryBackend) AccountID

func (b *InMemoryBackend) AccountID() string

func (*InMemoryBackend) BatchGetCollaborationAnalysisTemplate

func (b *InMemoryBackend) BatchGetCollaborationAnalysisTemplate(
	collaborationID string,
	templateArns []string,
) ([]*AnalysisTemplate, []BatchError, error)

func (*InMemoryBackend) BatchGetSchema

func (b *InMemoryBackend) BatchGetSchema(
	collaborationID string,
	names []string,
) ([]*Schema, []BatchError, error)

func (*InMemoryBackend) BatchGetSchemaAnalysisRule

func (b *InMemoryBackend) BatchGetSchemaAnalysisRule(
	collaborationID string,
	names []string,
	ruleType string,
) ([]*SchemaAnalysisRule, []BatchError, error)

func (*InMemoryBackend) CreateAnalysisTemplate

func (b *InMemoryBackend) CreateAnalysisTemplate(
	membershipID, name, description, format string,
	source map[string]any,
	analysisParameters []map[string]any,
	tags map[string]string,
) (*AnalysisTemplate, error)

func (*InMemoryBackend) CreateCollaboration

func (b *InMemoryBackend) CreateCollaboration(
	name, description, creatorDisplayName string,
	creatorMemberAbilities []string,
	members []MemberSpec,
	queryLogStatus string,
	tags map[string]string,
) (*Collaboration, error)

func (*InMemoryBackend) CreateCollaborationChangeRequest

func (b *InMemoryBackend) CreateCollaborationChangeRequest(
	collaborationID string,
	changes []map[string]any,
) (*CollaborationChangeRequest, error)

func (*InMemoryBackend) CreateConfiguredAudienceModelAssociation

func (b *InMemoryBackend) CreateConfiguredAudienceModelAssociation(
	membershipID, configuredAudienceModelArn, name, description string,
	manageResourcePolicies bool,
	tags map[string]string,
) (*ConfiguredAudienceModelAssociation, error)

func (*InMemoryBackend) CreateConfiguredTable

func (b *InMemoryBackend) CreateConfiguredTable(
	name, description string,
	tableReference map[string]any,
	allowedColumns []string,
	analysisMethod string,
	tags map[string]string,
) (*ConfiguredTable, error)

func (*InMemoryBackend) CreateConfiguredTableAnalysisRule

func (b *InMemoryBackend) CreateConfiguredTableAnalysisRule(
	configuredTableID, analysisRuleType string,
	policy map[string]any,
) (*ConfiguredTableAnalysisRule, error)

func (*InMemoryBackend) CreateConfiguredTableAssociation

func (b *InMemoryBackend) CreateConfiguredTableAssociation(
	membershipID, name, description, configuredTableID, roleArn string,
	tags map[string]string,
) (*ConfiguredTableAssociation, error)

func (*InMemoryBackend) CreateConfiguredTableAssociationAnalysisRule

func (b *InMemoryBackend) CreateConfiguredTableAssociationAnalysisRule(
	membershipID, assocID, ruleType string,
	policy map[string]any,
) (*ConfiguredTableAssociationAnalysisRule, error)

func (*InMemoryBackend) CreateIDMappingTable

func (b *InMemoryBackend) CreateIDMappingTable(
	membershipID, name, description string,
	inputReferenceConfig map[string]any,
	kmsKeyArn string,
	tags map[string]string,
) (*IDMappingTable, error)

func (*InMemoryBackend) CreateIDNamespaceAssociation

func (b *InMemoryBackend) CreateIDNamespaceAssociation(
	membershipID, name, description string,
	inputReferenceConfig map[string]any,
	idMappingConfig map[string]any,
	tags map[string]string,
) (*IDNamespaceAssociation, error)

func (*InMemoryBackend) CreateIntermediateTable added in v1.2.0

func (b *InMemoryBackend) CreateIntermediateTable(
	membershipID, name, description, kmsKeyArn string,
	populationAnalysisConfiguration map[string]any,
	retentionInDays int32,
	tags map[string]string,
) (*IntermediateTable, error)

func (*InMemoryBackend) CreateIntermediateTableAnalysisRule added in v1.2.0

func (b *InMemoryBackend) CreateIntermediateTableAnalysisRule(
	membershipID, tableID, ruleType string,
	policy map[string]any,
) (*IntermediateTableAnalysisRule, error)

func (*InMemoryBackend) CreateMembership

func (b *InMemoryBackend) CreateMembership(
	collaborationID, queryLogStatus string,
	memberAbilities []string,
	defaultResultConfiguration map[string]any,
	paymentConfiguration map[string]any,
	tags map[string]string,
) (*Membership, error)

func (*InMemoryBackend) CreatePrivacyBudgetTemplate

func (b *InMemoryBackend) CreatePrivacyBudgetTemplate(
	membershipID, privacyBudgetType, autoRefresh string,
	parameters map[string]any,
	tags map[string]string,
) (*PrivacyBudgetTemplate, error)

func (*InMemoryBackend) DeleteAnalysisTemplate

func (b *InMemoryBackend) DeleteAnalysisTemplate(membershipID, templateID string) error

func (*InMemoryBackend) DeleteCollaboration

func (b *InMemoryBackend) DeleteCollaboration(id string) error

func (*InMemoryBackend) DeleteConfiguredAudienceModelAssociation

func (b *InMemoryBackend) DeleteConfiguredAudienceModelAssociation(
	membershipID, assocID string,
) error

func (*InMemoryBackend) DeleteConfiguredTable

func (b *InMemoryBackend) DeleteConfiguredTable(id string) error

func (*InMemoryBackend) DeleteConfiguredTableAnalysisRule

func (b *InMemoryBackend) DeleteConfiguredTableAnalysisRule(
	configuredTableID, analysisRuleType string,
) error

func (*InMemoryBackend) DeleteConfiguredTableAssociation

func (b *InMemoryBackend) DeleteConfiguredTableAssociation(membershipID, assocID string) error

func (*InMemoryBackend) DeleteConfiguredTableAssociationAnalysisRule

func (b *InMemoryBackend) DeleteConfiguredTableAssociationAnalysisRule(
	membershipID, assocID, ruleType string,
) error

func (*InMemoryBackend) DeleteIDMappingTable

func (b *InMemoryBackend) DeleteIDMappingTable(membershipID, tableID string) error

func (*InMemoryBackend) DeleteIDNamespaceAssociation

func (b *InMemoryBackend) DeleteIDNamespaceAssociation(membershipID, assocID string) error

func (*InMemoryBackend) DeleteIntermediateTable added in v1.2.0

func (b *InMemoryBackend) DeleteIntermediateTable(membershipID, tableID string) error

DeleteIntermediateTable hard-deletes the table and cascades to its analysis rule and versions, matching the real API's documented behavior ("the service marks it as DELETED, removes its analysis rule and schema, and triggers storage cleanup") -- this backend has no separate DELETED status value to transition through (not a real IntermediateTableStatus enum value, see models.go), so a real hard delete (GetIntermediateTable then returns ResourceNotFoundException, matching every other resource's delete convention in this service) models the same observable end state.

func (*InMemoryBackend) DeleteIntermediateTableAnalysisRule added in v1.2.0

func (b *InMemoryBackend) DeleteIntermediateTableAnalysisRule(membershipID, tableID, ruleType string) error

func (*InMemoryBackend) DeleteMember

func (b *InMemoryBackend) DeleteMember(collaborationID, accountID string) error

func (*InMemoryBackend) DeleteMembership

func (b *InMemoryBackend) DeleteMembership(id string) error

func (*InMemoryBackend) DeletePrivacyBudgetTemplate

func (b *InMemoryBackend) DeletePrivacyBudgetTemplate(membershipID, templateID string) error

func (*InMemoryBackend) DisallowIntermediateTable added in v1.2.0

func (b *InMemoryBackend) DisallowIntermediateTable(membershipID, name string, includeDescendants bool) error

DisallowIntermediateTable marks every intermediate table in membershipID named name DISALLOWED_BY_DATA_PROVIDER, matching the real semantics documented on IntermediateTableStatus (the table owner/data provider withdrawing consent for further population/query). includeDescendants (default true on the wire) requests cascading the disallow to descendant intermediate tables built on top of this one, but this backend never populates TableDependencies (see the IntermediateTable doc comment), so there is no dependency graph to cascade through -- the direct-name-match transition below is real; the cascade is a documented no-op, not a fabricated one (see PARITY.md).

func (*InMemoryBackend) GetAnalysisTemplate

func (b *InMemoryBackend) GetAnalysisTemplate(
	membershipID, templateID string,
) (*AnalysisTemplate, error)

func (*InMemoryBackend) GetCollaboration

func (b *InMemoryBackend) GetCollaboration(id string) (*Collaboration, error)

func (*InMemoryBackend) GetCollaborationAnalysisTemplate

func (b *InMemoryBackend) GetCollaborationAnalysisTemplate(
	collaborationID, templateArn string,
) (*AnalysisTemplate, error)

func (*InMemoryBackend) GetCollaborationChangeRequest

func (b *InMemoryBackend) GetCollaborationChangeRequest(
	collaborationID, changeRequestID string,
) (*CollaborationChangeRequest, error)

func (*InMemoryBackend) GetCollaborationConfiguredAudienceModelAssociation

func (b *InMemoryBackend) GetCollaborationConfiguredAudienceModelAssociation(
	collaborationID, assocID string,
) (*ConfiguredAudienceModelAssociation, error)

func (*InMemoryBackend) GetCollaborationIDNamespaceAssociation

func (b *InMemoryBackend) GetCollaborationIDNamespaceAssociation(
	collaborationID, assocID string,
) (*IDNamespaceAssociation, error)

func (*InMemoryBackend) GetCollaborationPrivacyBudgetTemplate

func (b *InMemoryBackend) GetCollaborationPrivacyBudgetTemplate(
	collaborationID, templateID string,
) (*PrivacyBudgetTemplate, error)

func (*InMemoryBackend) GetConfiguredAudienceModelAssociation

func (b *InMemoryBackend) GetConfiguredAudienceModelAssociation(
	membershipID, assocID string,
) (*ConfiguredAudienceModelAssociation, error)

func (*InMemoryBackend) GetConfiguredTable

func (b *InMemoryBackend) GetConfiguredTable(id string) (*ConfiguredTable, error)

func (*InMemoryBackend) GetConfiguredTableAnalysisRule

func (b *InMemoryBackend) GetConfiguredTableAnalysisRule(
	configuredTableID, analysisRuleType string,
) (*ConfiguredTableAnalysisRule, error)

func (*InMemoryBackend) GetConfiguredTableAssociation

func (b *InMemoryBackend) GetConfiguredTableAssociation(
	membershipID, assocID string,
) (*ConfiguredTableAssociation, error)

func (*InMemoryBackend) GetConfiguredTableAssociationAnalysisRule

func (b *InMemoryBackend) GetConfiguredTableAssociationAnalysisRule(
	_, assocID, ruleType string,
) (*ConfiguredTableAssociationAnalysisRule, error)

func (*InMemoryBackend) GetIDMappingTable

func (b *InMemoryBackend) GetIDMappingTable(membershipID, tableID string) (*IDMappingTable, error)

func (*InMemoryBackend) GetIDNamespaceAssociation

func (b *InMemoryBackend) GetIDNamespaceAssociation(
	membershipID, assocID string,
) (*IDNamespaceAssociation, error)

func (*InMemoryBackend) GetIntermediateTable added in v1.2.0

func (b *InMemoryBackend) GetIntermediateTable(membershipID, tableID string) (*IntermediateTable, error)

func (*InMemoryBackend) GetIntermediateTableAnalysisRule added in v1.2.0

func (b *InMemoryBackend) GetIntermediateTableAnalysisRule(
	_, tableID, ruleType string,
) (*IntermediateTableAnalysisRule, error)

func (*InMemoryBackend) GetMembership

func (b *InMemoryBackend) GetMembership(id string) (*Membership, error)

func (*InMemoryBackend) GetPrivacyBudgetTemplate

func (b *InMemoryBackend) GetPrivacyBudgetTemplate(
	membershipID, templateID string,
) (*PrivacyBudgetTemplate, error)

func (*InMemoryBackend) GetProtectedJob

func (b *InMemoryBackend) GetProtectedJob(membershipID, jobID string) (*ProtectedJob, error)

func (*InMemoryBackend) GetProtectedQuery

func (b *InMemoryBackend) GetProtectedQuery(membershipID, queryID string) (*ProtectedQuery, error)

func (*InMemoryBackend) GetSchema

func (b *InMemoryBackend) GetSchema(collaborationID, name string) (*Schema, error)

func (*InMemoryBackend) GetSchemaAnalysisRule

func (b *InMemoryBackend) GetSchemaAnalysisRule(
	collaborationID, name, ruleType string,
) (*SchemaAnalysisRule, error)

func (*InMemoryBackend) ListAnalysisTemplates

func (b *InMemoryBackend) ListAnalysisTemplates(
	membershipID, maxResults, nextToken string,
) ([]*AnalysisTemplateSummary, string, error)

func (*InMemoryBackend) ListCollaborationAnalysisTemplates

func (b *InMemoryBackend) ListCollaborationAnalysisTemplates(
	collaborationID, maxResults, nextToken string,
) ([]*AnalysisTemplateSummary, string, error)

func (*InMemoryBackend) ListCollaborationChangeRequests

func (b *InMemoryBackend) ListCollaborationChangeRequests(
	collaborationID, maxResults, nextToken string,
) ([]*CollaborationChangeRequest, string, error)

func (*InMemoryBackend) ListCollaborationConfiguredAudienceModelAssociations

func (b *InMemoryBackend) ListCollaborationConfiguredAudienceModelAssociations(
	collaborationID, maxResults, nextToken string,
) ([]*ConfiguredAudienceModelAssociationSummary, string, error)

func (*InMemoryBackend) ListCollaborationIDNamespaceAssociations

func (b *InMemoryBackend) ListCollaborationIDNamespaceAssociations(
	collaborationID, maxResults, nextToken string,
) ([]*IDNamespaceAssociationSummary, string, error)

func (*InMemoryBackend) ListCollaborationPrivacyBudgetTemplates

func (b *InMemoryBackend) ListCollaborationPrivacyBudgetTemplates(
	collaborationID, maxResults, nextToken string,
) ([]*PrivacyBudgetTemplateSummary, string, error)

func (*InMemoryBackend) ListCollaborationPrivacyBudgets

func (b *InMemoryBackend) ListCollaborationPrivacyBudgets(
	collaborationID, _, _, _ string,
) ([]*PrivacyBudget, string, error)

func (*InMemoryBackend) ListCollaborations

func (b *InMemoryBackend) ListCollaborations(
	_, maxResults, nextToken string,
) ([]*CollaborationSummary, string)

func (*InMemoryBackend) ListConfiguredAudienceModelAssociations

func (b *InMemoryBackend) ListConfiguredAudienceModelAssociations(
	membershipID, maxResults, nextToken string,
) ([]*ConfiguredAudienceModelAssociationSummary, string, error)

func (*InMemoryBackend) ListConfiguredTableAssociations

func (b *InMemoryBackend) ListConfiguredTableAssociations(
	membershipID, maxResults, nextToken string,
) ([]*ConfiguredTableAssociationSummary, string, error)

func (*InMemoryBackend) ListConfiguredTables

func (b *InMemoryBackend) ListConfiguredTables(
	maxResults, nextToken string,
) ([]*ConfiguredTableSummary, string)

func (*InMemoryBackend) ListIDMappingTables

func (b *InMemoryBackend) ListIDMappingTables(
	membershipID, maxResults, nextToken string,
) ([]*IDMappingTableSummary, string, error)

func (*InMemoryBackend) ListIDNamespaceAssociations

func (b *InMemoryBackend) ListIDNamespaceAssociations(
	membershipID, maxResults, nextToken string,
) ([]*IDNamespaceAssociationSummary, string, error)

func (*InMemoryBackend) ListIntermediateTableVersions added in v1.2.0

func (b *InMemoryBackend) ListIntermediateTableVersions(
	membershipID, tableID, maxResults, nextToken string,
) ([]*IntermediateTableVersionSummary, string, error)

func (*InMemoryBackend) ListIntermediateTables added in v1.2.0

func (b *InMemoryBackend) ListIntermediateTables(
	membershipID, maxResults, nextToken string,
) ([]*IntermediateTableSummary, string, error)

func (*InMemoryBackend) ListMembers

func (b *InMemoryBackend) ListMembers(
	collaborationID string,
	maxResults, nextToken string,
) ([]*MemberSummary, string, error)

func (*InMemoryBackend) ListMemberships

func (b *InMemoryBackend) ListMemberships(
	status, maxResults, nextToken string,
) ([]*MembershipSummary, string)

func (*InMemoryBackend) ListPrivacyBudgetTemplates

func (b *InMemoryBackend) ListPrivacyBudgetTemplates(
	membershipID, privacyBudgetType, maxResults, nextToken string,
) ([]*PrivacyBudgetTemplateSummary, string, error)

func (*InMemoryBackend) ListPrivacyBudgets

func (b *InMemoryBackend) ListPrivacyBudgets(
	membershipID, _, _, _ string,
) ([]*PrivacyBudget, string, error)

func (*InMemoryBackend) ListProtectedJobs

func (b *InMemoryBackend) ListProtectedJobs(
	membershipID, status, maxResults, nextToken string,
) ([]*ProtectedJobSummary, string, error)

func (*InMemoryBackend) ListProtectedQueries

func (b *InMemoryBackend) ListProtectedQueries(
	membershipID, status, maxResults, nextToken string,
) ([]*ProtectedQuerySummary, string, error)

func (*InMemoryBackend) ListSchemas

func (b *InMemoryBackend) ListSchemas(
	collaborationID, schemaType, maxResults, nextToken string,
) ([]*SchemaSummary, string, error)

func (*InMemoryBackend) ListTagsForResource

func (b *InMemoryBackend) ListTagsForResource(resourceArn string) (map[string]string, error)

func (*InMemoryBackend) PopulateIDMappingTable

func (b *InMemoryBackend) PopulateIDMappingTable(
	membershipID, tableID string,
) (map[string]any, error)

func (*InMemoryBackend) PopulateIntermediateTable added in v1.2.0

func (b *InMemoryBackend) PopulateIntermediateTable(
	membershipID, tableID, payerAccountID string,
	computeConfiguration map[string]any,
	parameters map[string]string,
) (*PopulateIntermediateTableOutput, error)

PopulateIntermediateTable starts a real ProtectedQuery against the table's stored PopulationAnalysisConfiguration -- matching the real API's documented contract ("Use this value with GetProtectedQuery to track the population progress") -- and records a new POPULATE_STARTED version. It does not, and cannot, fabricate a row count or a Schema: this emulator has no SQL engine to actually execute the query, so the honest state transition is limited to status/version bookkeeping (see advanceIntermediateTablesLocked, which resolves the version and table status once the underlying ProtectedQuery reaches a terminal status, the same "advance on next read" pattern StartProtectedQuery already uses).

payerAccountID is accepted (matching the real PopulateIntermediateTableInput.AnalysisPayerAccountId wire field) but not persisted: ProtectedQuery has no modeled payer-account field anywhere else in this backend either (queryComputePayerAccountId is a pre-existing documented PARITY.md gap on ProtectedQuery/ProtectedJob), so there is nowhere honest to attach it without inventing a new field outside that gap's scope.

func (*InMemoryBackend) PreviewPrivacyImpact

func (b *InMemoryBackend) PreviewPrivacyImpact(
	membershipID string,
	_ map[string]any,
) (map[string]any, error)

func (*InMemoryBackend) Region

func (b *InMemoryBackend) Region() string

func (*InMemoryBackend) Reset

func (b *InMemoryBackend) Reset()

func (*InMemoryBackend) Restore

func (b *InMemoryBackend) Restore(ctx context.Context, data []byte) error

Restore deserializes backend state from a snapshot. It implements persistence.Persistable.

func (*InMemoryBackend) Snapshot

func (b *InMemoryBackend) Snapshot(ctx context.Context) []byte

Snapshot serializes the backend state to JSON. It implements persistence.Persistable.

func (*InMemoryBackend) StartProtectedJob

func (b *InMemoryBackend) StartProtectedJob(
	membershipID, jobType string,
	jobParameters map[string]any,
	resultConfig map[string]any,
) (*ProtectedJob, error)

func (*InMemoryBackend) StartProtectedQuery

func (b *InMemoryBackend) StartProtectedQuery(
	membershipID, sqlText string,
	resultConfig map[string]any,
	computeConfiguration map[string]any,
) (*ProtectedQuery, error)

func (*InMemoryBackend) TagResource

func (b *InMemoryBackend) TagResource(resourceArn string, tags map[string]string) error

func (*InMemoryBackend) UntagResource

func (b *InMemoryBackend) UntagResource(resourceArn string, tagKeys []string) error

func (*InMemoryBackend) UpdateAnalysisTemplate

func (b *InMemoryBackend) UpdateAnalysisTemplate(
	membershipID, templateID, description string,
) (*AnalysisTemplate, error)

func (*InMemoryBackend) UpdateCollaboration

func (b *InMemoryBackend) UpdateCollaboration(
	id, name, description string,
) (*Collaboration, error)

func (*InMemoryBackend) UpdateCollaborationChangeRequest

func (b *InMemoryBackend) UpdateCollaborationChangeRequest(
	collaborationID, changeRequestID, action string,
) (*CollaborationChangeRequest, error)

func (*InMemoryBackend) UpdateConfiguredAudienceModelAssociation

func (b *InMemoryBackend) UpdateConfiguredAudienceModelAssociation(
	membershipID, assocID, name, description string,
) (*ConfiguredAudienceModelAssociation, error)

func (*InMemoryBackend) UpdateConfiguredTable

func (b *InMemoryBackend) UpdateConfiguredTable(
	id, name, description string,
) (*ConfiguredTable, error)

func (*InMemoryBackend) UpdateConfiguredTableAnalysisRule

func (b *InMemoryBackend) UpdateConfiguredTableAnalysisRule(
	configuredTableID, analysisRuleType string,
	policy map[string]any,
) (*ConfiguredTableAnalysisRule, error)

func (*InMemoryBackend) UpdateConfiguredTableAssociation

func (b *InMemoryBackend) UpdateConfiguredTableAssociation(
	membershipID, assocID, description, roleArn string,
) (*ConfiguredTableAssociation, error)

func (*InMemoryBackend) UpdateConfiguredTableAssociationAnalysisRule

func (b *InMemoryBackend) UpdateConfiguredTableAssociationAnalysisRule(
	_, assocID, ruleType string,
	policy map[string]any,
) (*ConfiguredTableAssociationAnalysisRule, error)

func (*InMemoryBackend) UpdateIDMappingTable

func (b *InMemoryBackend) UpdateIDMappingTable(
	membershipID, tableID, description, kmsKeyArn string,
) (*IDMappingTable, error)

func (*InMemoryBackend) UpdateIDNamespaceAssociation

func (b *InMemoryBackend) UpdateIDNamespaceAssociation(
	membershipID, assocID, description string,
	idMappingConfig map[string]any,
) (*IDNamespaceAssociation, error)

func (*InMemoryBackend) UpdateIntermediateTable added in v1.2.0

func (b *InMemoryBackend) UpdateIntermediateTable(
	membershipID, tableID, description, kmsKeyArn string,
) (*IntermediateTable, error)

UpdateIntermediateTable updates the description and KMS key of an intermediate table. The real UpdateIntermediateTableInput additionally accepts a "columns" list to retype existing schema columns, but this backend never populates IntermediateTable.Schema in the first place (see the IntermediateTable doc comment) -- there is no real column data to retype, so that input is not modeled here rather than accepted and silently discarded against fabricated column state. See PARITY.md.

func (*InMemoryBackend) UpdateIntermediateTableAnalysisRule added in v1.2.0

func (b *InMemoryBackend) UpdateIntermediateTableAnalysisRule(
	_, tableID, ruleType string,
	policy map[string]any,
) (*IntermediateTableAnalysisRule, error)

func (*InMemoryBackend) UpdateMembership

func (b *InMemoryBackend) UpdateMembership(
	id, queryLogStatus string,
	defaultResultConfiguration map[string]any,
) (*Membership, error)

func (*InMemoryBackend) UpdatePrivacyBudgetTemplate

func (b *InMemoryBackend) UpdatePrivacyBudgetTemplate(
	membershipID, templateID, autoRefresh string,
	parameters map[string]any,
) (*PrivacyBudgetTemplate, error)

func (*InMemoryBackend) UpdateProtectedJob

func (b *InMemoryBackend) UpdateProtectedJob(
	membershipID, jobID, targetStatus string,
) (*ProtectedJob, error)

func (*InMemoryBackend) UpdateProtectedQuery

func (b *InMemoryBackend) UpdateProtectedQuery(
	membershipID, queryID, targetStatus string,
) (*ProtectedQuery, error)

type IntermediateTable added in v1.2.0

type IntermediateTable struct {
	PopulationAnalysisConfiguration map[string]any    `json:"populationAnalysisConfiguration,omitempty"`
	IntermediateTableVersion        map[string]any    `json:"intermediateTableVersion,omitempty"`
	Tags                            map[string]string `json:"-"`
	CollaborationArn                string            `json:"collaborationArn"`
	MembershipArn                   string            `json:"membershipArn"`
	Arn                             string            `json:"arn"`
	CollaborationID                 string            `json:"collaborationId"`
	MembershipID                    string            `json:"membershipId"`
	ID                              string            `json:"id"`
	Name                            string            `json:"name"`
	Description                     string            `json:"description,omitempty"`
	KmsKeyArn                       string            `json:"kmsKeyArn,omitempty"`
	Status                          string            `json:"status"`
	StatusReason                    string            `json:"statusReason,omitempty"`
	AnalysisRuleTypes               []string          `json:"analysisRuleTypes,omitempty"`
	RetentionInDays                 int32             `json:"retentionInDays,omitempty"`
	CreateTime                      float64           `json:"createTime,omitempty"`
	UpdateTime                      float64           `json:"updateTime,omitempty"`
}

IntermediateTable is the wire shape for CreateIntermediateTable/ GetIntermediateTable/UpdateIntermediateTable (Summary is its List shape). Verified against aws-sdk-go-v2/service/cleanrooms@v1.48.0's awsRestjson1_deserializeDocumentIntermediateTable: real keys are analysisRuleTypes, arn, childResources, collaborationArn, collaborationId, createTime, description, id, intermediateTableVersion, kmsKeyArn, membershipArn, membershipId, name, populationAnalysisConfiguration, retentionInDays, schema, status, statusReason, tableDependencies, updateTime. No "*Identifier" forms -- those are request-parameter-only names, matching every other resource in this service.

childResources, schema, and tableDependencies are real optional fields this backend does not model and are deliberately omitted from this struct (never fabricated with fake values, see PARITY.md): schema requires actually executing the stored populationAnalysisConfiguration query to learn real column types, which this emulator cannot do; childResources/ tableDependencies require a full base-table-dependency graph across other members' configured tables that this backend does not build.

type IntermediateTableAnalysisRule added in v1.2.0

type IntermediateTableAnalysisRule struct {
	AnalysisRulePolicy          map[string]any `json:"analysisRulePolicy,omitempty"`
	IntermediateTableArn        string         `json:"intermediateTableArn"`
	IntermediateTableIdentifier string         `json:"intermediateTableIdentifier"`
	AnalysisRuleType            string         `json:"analysisRuleType"`
	CreateTime                  float64        `json:"createTime,omitempty"`
	UpdateTime                  float64        `json:"updateTime,omitempty"`
}

IntermediateTableAnalysisRule verified against awsRestjson1_deserializeDocumentIntermediateTableAnalysisRule: real keys are analysisRulePolicy, analysisRuleType, createTime, intermediateTableArn, intermediateTableIdentifier, updateTime. Note that the real output key really is "intermediateTableIdentifier" (NOT "intermediateTableId") -- confirmed directly against the deserializer, the same kind of intentional asymmetry already documented on ConfiguredTableAssociationAnalysisRule.MembershipIdentifier. Unlike ConfiguredTableAnalysisRule, IntermediateTableAnalysisRule is NOT the same SDK union: types.IntermediateTableAnalysisRulePolicy (isIntermediateTableAnalysisRulePolicy) is a distinct Go interface from types.AnalysisRulePolicy (isAnalysisRulePolicy) used by ConfiguredTableAnalysisRule, even though their content shape happens to be structurally identical ({"v1": {"custom": {...}}}). This backend models both the same way regardless (a generic map[string]any pass-through, this service's established convention for every policy/union field), so no code is literally shared -- only the pass-through *strategy* is reused.

type IntermediateTableSummary added in v1.2.0

type IntermediateTableSummary struct {
	CollaborationArn  string   `json:"collaborationArn"`
	MembershipArn     string   `json:"membershipArn"`
	Arn               string   `json:"arn"`
	CollaborationID   string   `json:"collaborationId"`
	MembershipID      string   `json:"membershipId"`
	ID                string   `json:"id"`
	Name              string   `json:"name"`
	Description       string   `json:"description,omitempty"`
	Status            string   `json:"status"`
	AnalysisRuleTypes []string `json:"analysisRuleTypes,omitempty"`
	RetentionInDays   int32    `json:"retentionInDays,omitempty"`
	CreateTime        float64  `json:"createTime,omitempty"`
	UpdateTime        float64  `json:"updateTime,omitempty"`
}

IntermediateTableSummary is the wire shape for ListIntermediateTables items. Verified against awsRestjson1_deserializeDocumentIntermediateTableSummary: real keys are analysisRuleTypes, arn, collaborationArn, collaborationId, createTime, description, id, membershipArn, membershipId, name, retentionInDays, status, updateTime -- a strict subset of IntermediateTable (no childResources, intermediateTableVersion, kmsKeyArn, populationAnalysisConfiguration, schema, statusReason, tableDependencies).

type IntermediateTableVersionSummary added in v1.2.0

type IntermediateTableVersionSummary struct {
	Parameters     map[string]string `json:"-"`
	MembershipID   string            `json:"-"`
	AnalysisID     string            `json:"analysisId"`
	AnalysisType   string            `json:"analysisType"`
	Status         string            `json:"status"`
	TableID        string            `json:"tableId"`
	VersionID      string            `json:"versionId"`
	KmsKeyArn      string            `json:"kmsKeyArn,omitempty"`
	CreateTime     float64           `json:"createTime,omitempty"`
	ExpirationTime float64           `json:"expirationTime,omitempty"`
}

IntermediateTableVersionSummary is the wire shape for ListIntermediateTableVersions items. Verified against awsRestjson1_deserializeDocumentIntermediateTableVersionSummary: real keys are analysisId, analysisType, createTime, expirationTime, kmsKeyArn, status, tableId, versionId. MembershipID is Go-only bookkeeping (json:"-") used to look up the underlying ProtectedQuery this version's population run created (see PopulateIntermediateTable/advanceIntermediateTablesLocked in intermediate_tables.go) -- there is no membershipId key on this real type. Parameters is also Go-only bookkeeping: the real "parameters" key belongs to the nested types.IntermediateTableActiveVersion (surfaced as IntermediateTable.IntermediateTableVersion once population succeeds), not to this Summary type, so it is carried here only to round-trip through to that map when advanceIntermediateTablesLocked resolves the version.

type MemberSpec

type MemberSpec struct {
	PaymentConfig map[string]any `json:"paymentConfiguration,omitempty"`
	AccountID     string         `json:"accountId"`
	DisplayName   string         `json:"displayName"`
	Abilities     []string       `json:"memberAbilities"`
}

type MemberSummary

type MemberSummary struct {
	PaymentConfig map[string]any `json:"paymentConfiguration"`
	AccountID     string         `json:"accountId"`
	DisplayName   string         `json:"displayName"`
	Status        string         `json:"status"`
	MembershipArn string         `json:"membershipArn,omitempty"`
	MembershipID  string         `json:"membershipId,omitempty"`
	Abilities     []string       `json:"abilities"`
	CreateTime    float64        `json:"createTime,omitempty"`
	UpdateTime    float64        `json:"updateTime,omitempty"`
}

MemberSummary is the wire shape returned by ListMembers. Verified against aws-sdk-go-v2/service/cleanrooms@v1.45.6's awsRestjson1_deserializeDocumentMemberSummary: real keys are abilities, accountId, createTime, displayName, membershipArn, membershipId, mlAbilities (not modeled -- ML abilities are out of scope for this emulator), paymentConfiguration, status, updateTime.

type Membership

type Membership struct {
	DefaultResultConfiguration      map[string]any `json:"defaultResultConfiguration,omitempty"`
	PaymentConfiguration            map[string]any `json:"paymentConfiguration"`
	QueryLogStatus                  string         `json:"queryLogStatus,omitempty"`
	CollaborationIdentifier         string         `json:"-"`
	CollaborationCreatorAccountID   string         `json:"collaborationCreatorAccountId"`
	CollaborationCreatorDisplayName string         `json:"collaborationCreatorDisplayName"`
	MembershipIdentifier            string         `json:"-"`
	Status                          string         `json:"status"`
	CollaborationName               string         `json:"collaborationName"`
	CollaborationArn                string         `json:"collaborationArn"`
	Arn                             string         `json:"arn"`
	CollaborationID                 string         `json:"collaborationId"`
	ID                              string         `json:"id"`
	MemberAbilities                 []string       `json:"memberAbilities,omitempty"`
	UpdateTime                      float64        `json:"updateTime,omitempty"`
	CreateTime                      float64        `json:"createTime,omitempty"`
}

Membership is the wire shape for CreateMembership/GetMembership/ UpdateMembership. Verified against awsRestjson1_deserializeDocumentMembership: real keys are arn, collaborationArn, collaborationCreatorAccountId, collaborationCreatorDisplayName, collaborationId, collaborationName, createTime, defaultJobResultConfiguration (not modeled), defaultResultConfiguration, id, isMetricsEnabled (not modeled), jobLogStatus (not modeled), memberAbilities, mlMemberAbilities (not modeled), paymentConfiguration, queryLogStatus, status, updateTime. No "membershipIdentifier" or "collaborationIdentifier" key (those are request-only parameter names).

type MembershipSummary

type MembershipSummary struct {
	PaymentConfiguration            map[string]any `json:"paymentConfiguration"`
	CollaborationName               string         `json:"collaborationName"`
	Arn                             string         `json:"arn"`
	CollaborationIdentifier         string         `json:"-"`
	CollaborationArn                string         `json:"collaborationArn"`
	CollaborationCreatorAccountID   string         `json:"collaborationCreatorAccountId"`
	CollaborationCreatorDisplayName string         `json:"collaborationCreatorDisplayName"`
	MembershipIdentifier            string         `json:"-"`
	Status                          string         `json:"status"`
	ID                              string         `json:"id"`
	CollaborationID                 string         `json:"collaborationId"`
	MemberAbilities                 []string       `json:"memberAbilities,omitempty"`
	CreateTime                      float64        `json:"createTime,omitempty"`
	UpdateTime                      float64        `json:"updateTime,omitempty"`
}

MembershipSummary is the wire shape for ListMemberships. Verified against awsRestjson1_deserializeDocumentMembershipSummary: same key set as Membership minus defaultResultConfiguration/defaultJobResultConfiguration/ isMetricsEnabled/jobLogStatus.

type PopulateIntermediateTableOutput added in v1.2.0

type PopulateIntermediateTableOutput struct {
	AnalysisID   string `json:"analysisId"`
	AnalysisType string `json:"analysisType"`
	VersionID    string `json:"versionId"`
}

PopulateIntermediateTableOutput is the (unwrapped -- no envelope key, confirmed against awsRestjson1_deserializeOpDocumentPopulateIntermediateTableOutput) response shape for PopulateIntermediateTable: real keys are analysisId, analysisType, versionId.

type PrivacyBudget

type PrivacyBudget struct {
	Budget                          map[string]any `json:"budget,omitempty"`
	ID                              string         `json:"id"`
	PrivacyBudgetTemplateArn        string         `json:"privacyBudgetTemplateArn"`
	PrivacyBudgetTemplateIdentifier string         `json:"privacyBudgetTemplateIdentifier"`
	CollaborationArn                string         `json:"collaborationArn"`
	CollaborationIdentifier         string         `json:"collaborationIdentifier"`
	MembershipArn                   string         `json:"membershipArn"`
	MembershipIdentifier            string         `json:"membershipIdentifier"`
	PrivacyBudgetType               string         `json:"privacyBudgetType"`
	MembershipID                    string         `json:"membershipId"`
	CollaborationID                 string         `json:"collaborationId"`
}

type PrivacyBudgetTemplate

type PrivacyBudgetTemplate struct {
	Parameters                      map[string]any    `json:"parameters,omitempty"`
	Tags                            map[string]string `json:"-"`
	MembershipArn                   string            `json:"membershipArn"`
	Arn                             string            `json:"arn"`
	CollaborationArn                string            `json:"collaborationArn"`
	CollaborationIdentifier         string            `json:"-"`
	PrivacyBudgetTemplateIdentifier string            `json:"-"`
	MembershipIdentifier            string            `json:"-"`
	PrivacyBudgetType               string            `json:"privacyBudgetType"`
	AutoRefresh                     string            `json:"autoRefresh,omitempty"`
	ID                              string            `json:"id"`
	MembershipID                    string            `json:"membershipId"`
	CollaborationID                 string            `json:"collaborationId"`
	CreateTime                      float64           `json:"createTime,omitempty"`
	UpdateTime                      float64           `json:"updateTime,omitempty"`
}

PrivacyBudgetTemplate is the wire shape for CreatePrivacyBudgetTemplate/Get/ UpdatePrivacyBudgetTemplate (Summary is its List shape). Verified against awsRestjson1_deserializeDocumentPrivacyBudgetTemplate(Summary): real keys use "id"/"collaborationId"/"membershipId", never the "*Identifier" forms.

type PrivacyBudgetTemplateSummary

type PrivacyBudgetTemplateSummary struct {
	PrivacyBudgetTemplateIdentifier string  `json:"-"`
	Arn                             string  `json:"arn"`
	CollaborationArn                string  `json:"collaborationArn"`
	CollaborationIdentifier         string  `json:"-"`
	MembershipArn                   string  `json:"membershipArn"`
	MembershipIdentifier            string  `json:"-"`
	PrivacyBudgetType               string  `json:"privacyBudgetType"`
	ID                              string  `json:"id"`
	MembershipID                    string  `json:"membershipId"`
	CollaborationID                 string  `json:"collaborationId"`
	CreateTime                      float64 `json:"createTime,omitempty"`
	UpdateTime                      float64 `json:"updateTime,omitempty"`
}

type ProtectedJob

type ProtectedJob struct {
	JobParameters        map[string]any `json:"jobParameters,omitempty"`
	ResultConfiguration  map[string]any `json:"resultConfiguration,omitempty"`
	Statistics           map[string]any `json:"statistics,omitempty"`
	Result               map[string]any `json:"result,omitempty"`
	Error                map[string]any `json:"error,omitempty"`
	ID                   string         `json:"id"`
	MembershipIdentifier string         `json:"-"`
	MembershipArn        string         `json:"membershipArn"`
	Status               string         `json:"status"`
	Type                 string         `json:"type"`
	MembershipID         string         `json:"membershipId"`
	CreateTime           float64        `json:"createTime,omitempty"`
}

ProtectedJob is the wire shape for StartProtectedJob/GetProtectedJob (Summary is its List shape). Verified against awsRestjson1_deserializeDocumentProtectedJob(Summary): same pattern as ProtectedQuery. jobComputePayerAccountId (both), receiverConfigurations (summary) are not modeled (deferred).

type ProtectedJobSummary

type ProtectedJobSummary struct {
	ID                   string  `json:"id"`
	MembershipIdentifier string  `json:"-"`
	MembershipArn        string  `json:"membershipArn"`
	Status               string  `json:"status"`
	Type                 string  `json:"type"`
	MembershipID         string  `json:"membershipId"`
	CreateTime           float64 `json:"createTime,omitempty"`
}

type ProtectedQuery

type ProtectedQuery struct {
	SQLParameters        map[string]any `json:"sqlParameters,omitempty"`
	ResultConfiguration  map[string]any `json:"resultConfiguration,omitempty"`
	ComputeConfiguration map[string]any `json:"computeConfiguration,omitempty"`
	Statistics           map[string]any `json:"statistics,omitempty"`
	Result               map[string]any `json:"result,omitempty"`
	Error                map[string]any `json:"error,omitempty"`
	ID                   string         `json:"id"`
	MembershipIdentifier string         `json:"-"`
	MembershipArn        string         `json:"membershipArn"`
	Status               string         `json:"status"`
	MembershipID         string         `json:"membershipId"`
	CreateTime           float64        `json:"createTime,omitempty"`
}

ProtectedQuery is the wire shape for StartProtectedQuery/GetProtectedQuery (Summary is its List shape). Verified against awsRestjson1_deserializeDocumentProtectedQuery(Summary): real keys use "id"/"membershipId", never "membershipIdentifier" (request-parameter-only name). differentialPrivacy, queryComputePayerAccountId (both), receiverConfigurations (summary) are not modeled (deferred, see PARITY.md).

type ProtectedQuerySummary

type ProtectedQuerySummary struct {
	ID                   string  `json:"id"`
	MembershipIdentifier string  `json:"-"`
	MembershipArn        string  `json:"membershipArn"`
	Status               string  `json:"status"`
	MembershipID         string  `json:"membershipId"`
	CreateTime           float64 `json:"createTime,omitempty"`
}

type Provider

type Provider struct{}

Provider implements service.Provider for AWS Clean Rooms.

func (*Provider) Init

Init initializes the Clean Rooms service backend and handler.

func (*Provider) Name

func (p *Provider) Name() string

Name returns the provider name.

type Schema

type Schema struct {
	CollaborationArn        string           `json:"collaborationArn"`
	CollaborationIdentifier string           `json:"-"`
	CollaborationID         string           `json:"collaborationId"`
	CreatorAccountID        string           `json:"creatorAccountId"`
	Name                    string           `json:"name"`
	Type                    string           `json:"type"`
	AnalysisMethod          string           `json:"analysisMethod,omitempty"`
	Columns                 []map[string]any `json:"columns,omitempty"`
	PartitionKeys           []map[string]any `json:"partitionKeys,omitempty"`
	AnalysisRuleTypes       []string         `json:"analysisRuleTypes,omitempty"`
	CreateTime              float64          `json:"createTime,omitempty"`
	UpdateTime              float64          `json:"updateTime,omitempty"`
}

Schema is the wire shape for GetSchema (SchemaSummary is its List shape). Verified against awsRestjson1_deserializeDocumentSchema(Summary): real keys use "collaborationId", never "collaborationIdentifier" (request-parameter-only name). resourceArn, schemaStatusDetails, schemaTypeProperties, selectedAnalysisMethods are not modeled (deferred, see PARITY.md; there is no Create path for schemas in this backend at all, so these fields are never populated regardless).

type SchemaAnalysisRule

type SchemaAnalysisRule struct {
	Policy                  map[string]any `json:"policy,omitempty"`
	CollaborationArn        string         `json:"collaborationArn"`
	CollaborationIdentifier string         `json:"-"`
	CollaborationID         string         `json:"collaborationId"`
	Name                    string         `json:"name"`
	Type                    string         `json:"type"`
	CreateTime              float64        `json:"createTime,omitempty"`
	UpdateTime              float64        `json:"updateTime,omitempty"`
}

SchemaAnalysisRule is a simplified stand-in: the real GetSchemaAnalysisRule response wraps a types.AnalysisRule union (a deeper shape keyed by analysis-rule "type", distinct from the ConfiguredTable/ ConfiguredTableAssociation analysis-rule shapes), which this backend does not model precisely (deferred, see PARITY.md). Since schemas are never created in this backend (no Create path exists, see Schema doc), this type's wire shape is currently unreachable in practice either way.

type SchemaSummary

type SchemaSummary struct {
	CollaborationArn        string   `json:"collaborationArn"`
	CollaborationIdentifier string   `json:"-"`
	CollaborationID         string   `json:"collaborationId"`
	CreatorAccountID        string   `json:"creatorAccountId"`
	Name                    string   `json:"name"`
	Type                    string   `json:"type"`
	AnalysisMethod          string   `json:"analysisMethod,omitempty"`
	AnalysisRuleTypes       []string `json:"analysisRuleTypes,omitempty"`
	CreateTime              float64  `json:"createTime,omitempty"`
	UpdateTime              float64  `json:"updateTime,omitempty"`
}

type StorageBackend

type StorageBackend interface {
	Region() string
	AccountID() string
	Reset()

	// Snapshot and Restore implement persistence.Persistable. Handler
	// delegates to them (see persistence.go) so cli.go's generic
	// setupPersistence picks CleanRooms up.
	Snapshot(ctx context.Context) []byte
	Restore(ctx context.Context, data []byte) error

	// Collaboration operations.
	CreateCollaboration(
		name, description, creatorDisplayName string,
		creatorMemberAbilities []string,
		members []MemberSpec,
		queryLogStatus string,
		tags map[string]string,
	) (*Collaboration, error)
	GetCollaboration(id string) (*Collaboration, error)
	ListCollaborations(memberStatus, maxResults, nextToken string) ([]*CollaborationSummary, string)
	UpdateCollaboration(id, name, description string) (*Collaboration, error)
	DeleteCollaboration(id string) error
	ListMembers(
		collaborationID string,
		maxResults, nextToken string,
	) ([]*MemberSummary, string, error)
	DeleteMember(collaborationID, accountID string) error

	// Membership operations.
	CreateMembership(
		collaborationID, queryLogStatus string,
		memberAbilities []string,
		defaultResultConfiguration map[string]any,
		paymentConfiguration map[string]any,
		tags map[string]string,
	) (*Membership, error)
	GetMembership(id string) (*Membership, error)
	ListMemberships(status, maxResults, nextToken string) ([]*MembershipSummary, string)
	UpdateMembership(
		id, queryLogStatus string,
		defaultResultConfiguration map[string]any,
	) (*Membership, error)
	DeleteMembership(id string) error

	// ConfiguredTable operations.
	CreateConfiguredTable(
		name, description string,
		tableReference map[string]any,
		allowedColumns []string,
		analysisMethod string,
		tags map[string]string,
	) (*ConfiguredTable, error)
	GetConfiguredTable(id string) (*ConfiguredTable, error)
	ListConfiguredTables(maxResults, nextToken string) ([]*ConfiguredTableSummary, string)
	UpdateConfiguredTable(id, name, description string) (*ConfiguredTable, error)
	DeleteConfiguredTable(id string) error

	// ConfiguredTableAnalysisRule operations.
	CreateConfiguredTableAnalysisRule(
		configuredTableID, analysisRuleType string,
		policy map[string]any,
	) (*ConfiguredTableAnalysisRule, error)
	GetConfiguredTableAnalysisRule(
		configuredTableID, analysisRuleType string,
	) (*ConfiguredTableAnalysisRule, error)
	UpdateConfiguredTableAnalysisRule(
		configuredTableID, analysisRuleType string,
		policy map[string]any,
	) (*ConfiguredTableAnalysisRule, error)
	DeleteConfiguredTableAnalysisRule(configuredTableID, analysisRuleType string) error

	// ConfiguredTableAssociation operations.
	CreateConfiguredTableAssociation(
		membershipID, name, description, configuredTableID, roleArn string,
		tags map[string]string,
	) (*ConfiguredTableAssociation, error)
	GetConfiguredTableAssociation(membershipID, assocID string) (*ConfiguredTableAssociation, error)
	ListConfiguredTableAssociations(
		membershipID, maxResults, nextToken string,
	) ([]*ConfiguredTableAssociationSummary, string, error)
	UpdateConfiguredTableAssociation(
		membershipID, assocID, description, roleArn string,
	) (*ConfiguredTableAssociation, error)
	DeleteConfiguredTableAssociation(membershipID, assocID string) error

	// ConfiguredTableAssociationAnalysisRule operations.
	CreateConfiguredTableAssociationAnalysisRule(
		membershipID, assocID, ruleType string,
		policy map[string]any,
	) (*ConfiguredTableAssociationAnalysisRule, error)
	GetConfiguredTableAssociationAnalysisRule(
		membershipID, assocID, ruleType string,
	) (*ConfiguredTableAssociationAnalysisRule, error)
	UpdateConfiguredTableAssociationAnalysisRule(
		membershipID, assocID, ruleType string,
		policy map[string]any,
	) (*ConfiguredTableAssociationAnalysisRule, error)
	DeleteConfiguredTableAssociationAnalysisRule(membershipID, assocID, ruleType string) error

	// AnalysisTemplate operations.
	CreateAnalysisTemplate(
		membershipID, name, description, format string,
		source map[string]any,
		analysisParameters []map[string]any,
		tags map[string]string,
	) (*AnalysisTemplate, error)
	GetAnalysisTemplate(membershipID, templateID string) (*AnalysisTemplate, error)
	ListAnalysisTemplates(
		membershipID, maxResults, nextToken string,
	) ([]*AnalysisTemplateSummary, string, error)
	UpdateAnalysisTemplate(membershipID, templateID, description string) (*AnalysisTemplate, error)
	DeleteAnalysisTemplate(membershipID, templateID string) error

	// Collaboration AnalysisTemplate operations (read-only views).
	GetCollaborationAnalysisTemplate(collaborationID, templateArn string) (*AnalysisTemplate, error)
	ListCollaborationAnalysisTemplates(
		collaborationID, maxResults, nextToken string,
	) ([]*AnalysisTemplateSummary, string, error)
	BatchGetCollaborationAnalysisTemplate(
		collaborationID string,
		templateArns []string,
	) ([]*AnalysisTemplate, []BatchError, error)

	// Schema operations.
	GetSchema(collaborationID, name string) (*Schema, error)
	ListSchemas(
		collaborationID, schemaType, maxResults, nextToken string,
	) ([]*SchemaSummary, string, error)
	BatchGetSchema(collaborationID string, names []string) ([]*Schema, []BatchError, error)
	GetSchemaAnalysisRule(collaborationID, name, ruleType string) (*SchemaAnalysisRule, error)
	BatchGetSchemaAnalysisRule(
		collaborationID string,
		names []string,
		ruleType string,
	) ([]*SchemaAnalysisRule, []BatchError, error)

	// ProtectedQuery operations.
	StartProtectedQuery(
		membershipID, sqlText string,
		resultConfig map[string]any,
		computeConfiguration map[string]any,
	) (*ProtectedQuery, error)
	GetProtectedQuery(membershipID, queryID string) (*ProtectedQuery, error)
	ListProtectedQueries(
		membershipID, status, maxResults, nextToken string,
	) ([]*ProtectedQuerySummary, string, error)
	UpdateProtectedQuery(membershipID, queryID, status string) (*ProtectedQuery, error)

	// ProtectedJob operations.
	StartProtectedJob(
		membershipID, jobType string,
		jobParameters map[string]any,
		resultConfig map[string]any,
	) (*ProtectedJob, error)
	GetProtectedJob(membershipID, jobID string) (*ProtectedJob, error)
	ListProtectedJobs(
		membershipID, status, maxResults, nextToken string,
	) ([]*ProtectedJobSummary, string, error)
	UpdateProtectedJob(membershipID, jobID, status string) (*ProtectedJob, error)

	// PrivacyBudgetTemplate operations.
	CreatePrivacyBudgetTemplate(
		membershipID, privacyBudgetType, autoRefresh string,
		parameters map[string]any,
		tags map[string]string,
	) (*PrivacyBudgetTemplate, error)
	GetPrivacyBudgetTemplate(membershipID, templateID string) (*PrivacyBudgetTemplate, error)
	ListPrivacyBudgetTemplates(
		membershipID, privacyBudgetType, maxResults, nextToken string,
	) ([]*PrivacyBudgetTemplateSummary, string, error)
	UpdatePrivacyBudgetTemplate(
		membershipID, templateID, autoRefresh string,
		parameters map[string]any,
	) (*PrivacyBudgetTemplate, error)
	DeletePrivacyBudgetTemplate(membershipID, templateID string) error

	// PrivacyBudget operations (read-only).
	ListPrivacyBudgets(
		membershipID, privacyBudgetType, maxResults, nextToken string,
	) ([]*PrivacyBudget, string, error)
	ListCollaborationPrivacyBudgets(
		collaborationID, privacyBudgetType, maxResults, nextToken string,
	) ([]*PrivacyBudget, string, error)
	GetCollaborationPrivacyBudgetTemplate(
		collaborationID, templateID string,
	) (*PrivacyBudgetTemplate, error)
	ListCollaborationPrivacyBudgetTemplates(
		collaborationID, maxResults, nextToken string,
	) ([]*PrivacyBudgetTemplateSummary, string, error)
	PreviewPrivacyImpact(membershipID string, parameters map[string]any) (map[string]any, error)

	// IDMappingTable operations.
	CreateIDMappingTable(
		membershipID, name, description string,
		inputReferenceConfig map[string]any,
		kmsKeyArn string,
		tags map[string]string,
	) (*IDMappingTable, error)
	GetIDMappingTable(membershipID, tableID string) (*IDMappingTable, error)
	ListIDMappingTables(
		membershipID, maxResults, nextToken string,
	) ([]*IDMappingTableSummary, string, error)
	UpdateIDMappingTable(
		membershipID, tableID, description, kmsKeyArn string,
	) (*IDMappingTable, error)
	DeleteIDMappingTable(membershipID, tableID string) error
	PopulateIDMappingTable(membershipID, tableID string) (map[string]any, error)

	// IDNamespaceAssociation operations.
	CreateIDNamespaceAssociation(
		membershipID, name, description string,
		inputReferenceConfig map[string]any,
		idMappingConfig map[string]any,
		tags map[string]string,
	) (*IDNamespaceAssociation, error)
	GetIDNamespaceAssociation(membershipID, assocID string) (*IDNamespaceAssociation, error)
	ListIDNamespaceAssociations(
		membershipID, maxResults, nextToken string,
	) ([]*IDNamespaceAssociationSummary, string, error)
	UpdateIDNamespaceAssociation(
		membershipID, assocID, description string,
		idMappingConfig map[string]any,
	) (*IDNamespaceAssociation, error)
	DeleteIDNamespaceAssociation(membershipID, assocID string) error
	GetCollaborationIDNamespaceAssociation(
		collaborationID, assocID string,
	) (*IDNamespaceAssociation, error)
	ListCollaborationIDNamespaceAssociations(
		collaborationID, maxResults, nextToken string,
	) ([]*IDNamespaceAssociationSummary, string, error)

	// ConfiguredAudienceModelAssociation operations.
	CreateConfiguredAudienceModelAssociation(
		membershipID, configuredAudienceModelArn, name, description string,
		manageResourcePolicies bool,
		tags map[string]string,
	) (*ConfiguredAudienceModelAssociation, error)
	GetConfiguredAudienceModelAssociation(
		membershipID, assocID string,
	) (*ConfiguredAudienceModelAssociation, error)
	ListConfiguredAudienceModelAssociations(
		membershipID, maxResults, nextToken string,
	) ([]*ConfiguredAudienceModelAssociationSummary, string, error)
	UpdateConfiguredAudienceModelAssociation(
		membershipID, assocID, name, description string,
	) (*ConfiguredAudienceModelAssociation, error)
	DeleteConfiguredAudienceModelAssociation(membershipID, assocID string) error
	GetCollaborationConfiguredAudienceModelAssociation(
		collaborationID, assocID string,
	) (*ConfiguredAudienceModelAssociation, error)
	ListCollaborationConfiguredAudienceModelAssociations(
		collaborationID, maxResults, nextToken string,
	) ([]*ConfiguredAudienceModelAssociationSummary, string, error)

	// CollaborationChangeRequest operations.
	CreateCollaborationChangeRequest(
		collaborationID string,
		changes []map[string]any,
	) (*CollaborationChangeRequest, error)
	GetCollaborationChangeRequest(
		collaborationID, changeRequestID string,
	) (*CollaborationChangeRequest, error)
	ListCollaborationChangeRequests(
		collaborationID, maxResults, nextToken string,
	) ([]*CollaborationChangeRequest, string, error)
	UpdateCollaborationChangeRequest(
		collaborationID, changeRequestID, action string,
	) (*CollaborationChangeRequest, error)

	// IntermediateTable operations.
	CreateIntermediateTable(
		membershipID, name, description, kmsKeyArn string,
		populationAnalysisConfiguration map[string]any,
		retentionInDays int32,
		tags map[string]string,
	) (*IntermediateTable, error)
	GetIntermediateTable(membershipID, tableID string) (*IntermediateTable, error)
	ListIntermediateTables(
		membershipID, maxResults, nextToken string,
	) ([]*IntermediateTableSummary, string, error)
	UpdateIntermediateTable(membershipID, tableID, description, kmsKeyArn string) (*IntermediateTable, error)
	DeleteIntermediateTable(membershipID, tableID string) error
	ListIntermediateTableVersions(
		membershipID, tableID, maxResults, nextToken string,
	) ([]*IntermediateTableVersionSummary, string, error)
	PopulateIntermediateTable(
		membershipID, tableID, payerAccountID string,
		computeConfiguration map[string]any,
		parameters map[string]string,
	) (*PopulateIntermediateTableOutput, error)
	DisallowIntermediateTable(membershipID, name string, includeDescendants bool) error

	// IntermediateTableAnalysisRule operations.
	CreateIntermediateTableAnalysisRule(
		membershipID, tableID, ruleType string,
		policy map[string]any,
	) (*IntermediateTableAnalysisRule, error)
	GetIntermediateTableAnalysisRule(membershipID, tableID, ruleType string) (*IntermediateTableAnalysisRule, error)
	UpdateIntermediateTableAnalysisRule(
		membershipID, tableID, ruleType string,
		policy map[string]any,
	) (*IntermediateTableAnalysisRule, error)
	DeleteIntermediateTableAnalysisRule(membershipID, tableID, ruleType string) error

	// Tag operations.
	ListTagsForResource(resourceArn string) (map[string]string, error)
	TagResource(resourceArn string, tags map[string]string) error
	UntagResource(resourceArn string, tagKeys []string) error
}

StorageBackend defines the interface for all Clean Rooms backend operations.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL