@Override
    public List<Relationship> resourceShape(ResourceShape shape) {
        int neededSize = shape.getAllOperations().size() + shape.getResources().size()
                + shape.getIdentifiers().size()
                + shape.getProperties().size();
        List<Relationship> result = initializeRelationships(shape, neededSize);
        shape.getIdentifiers().forEach((k, v) -> push(result, shape, RelationshipType.IDENTIFIER, v));
        shape.getProperties().forEach((k, v) -> push(result, shape, RelationshipType.PROPERTY, v));
        shape.getResources().forEach(id -> push(result, shape, RelationshipType.RESOURCE, id));
        shape.getList().ifPresent(id -> push(result, shape, RelationshipType.LIST, id));
        shape.getCreate().ifPresent(id -> push(result, shape, RelationshipType.CREATE, id));
        shape.getPut().ifPresent(id -> push(result, shape, RelationshipType.PUT, id));
        shape.getRead().ifPresent(id -> push(result, shape, RelationshipType.READ, id));
        shape.getUpdate().ifPresent(id -> push(result, shape, RelationshipType.UPDATE, id));
        shape.getDelete().ifPresent(id -> push(result, shape, RelationshipType.DELETE, id));
        shape.getOperations().forEach(id -> result.add(relationship(shape, RelationshipType.OPERATION, id)));
        shape.getCollectionOperations().forEach(id -> push(result, shape, RelationshipType.COLLECTION_OPERATION, id));
        return result;
    }
Finds all neighbors of a shape, returning them as a list of
{@link Relationship} objects.

<p>Each neighbor shape that is not in the provided model will
result in a relationship where the optional
{@link Relationship#getNeighborShape() neighbor shape} is empty.

@see NeighborProvider#of
smithy-model/src/main/java/software/amazon/smithy/model/neighbor/NeighborVisitor.java