Interface KnowledgeIndex
-
- All Known Implementing Classes:
ArnIndex
,AuthorizerIndex
,AwsTagIndex
,BottomUpIndex
,BoxIndex
,CfnResourceIndex
,ClientEndpointDiscoveryIndex
,ConditionKeysIndex
,ContextIndex
,EndpointModifierIndex
,EventStreamIndex
,HttpBindingIndex
,IdentifierBindingIndex
,IntegrationTraitIndex
,NeighborProviderIndex
,NullableIndex
,OperationIndex
,PaginatedIndex
,PlaneIndex
,PropertyBindingIndex
,ResolvedTopicIndex
,ServiceIndex
,TextIndex
,TopDownIndex
,TopologicalIndex
public interface KnowledgeIndex
A marker interface used to indicate that a class contains an index of computed knowledge about aModel
.The purpose of a KnowledgeIndex is to reduce code duplication and complexity of extracting and computing information about a model. A KnowledgeIndex is often a mapping of
ShapeId
to some kind of interesting computed information. For example, in order to resolve the input/output/error structures referenced by anOperationShape
, you need aModel
, to ensure that the reference from the operation to the structure is resolvable in the model, that the shape it references is a structure, and then to cast the shape to aStructureShape
. Because this process can be complex and is required by a large number of validators and tools, Smithy provides anOperationIndex
to compute it automatically.By convention, each KnowledgeIndex should provide a public static method named
of
that accepts aModel
and returns an instance of the KnowledgeIndex. Theof
method should invoke theModel.getKnowledge(Class, Function)
method to ensure that the index is only computed once per model. Because they are cached and can be used across threads, a KnowledgeIndex must be thread safe.The following example demonstrates a standard KnowledgeIndex implementation:
public final class MyIndex implements KnowledgeIndex { public MyIndex(Model model) { // implement the code used to create the index. } public static MyIndex of(Model model) { return model.getKnowledge(MyIndex.class, MyIndex::new); } // Implement methods used to query the knowledge index. }