public interface KnowledgeIndex
Model
.
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 an OperationShape
,
you need a Model
, 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 a
StructureShape
. Because this process can be complex and is
required by a large number of validators and tools, Smithy provides an
OperationIndex
to compute it automatically.
By convention, each KnowledgeIndex should provide a public static method
named of
that accepts a Model
and returns an instance of
the KnowledgeIndex. The of
method should invoke the
Model.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.
}