Skip to content

lens, traverse and validate question #435

@prabhu-madanagopal

Description

@prabhu-madanagopal

I have deep hierarchal object that I need to validate. My question is how to accumulate and validate all validations in the data structure in one traversal?

In the below example, suppose I want to vaildate OrderDocument and OrderItem in one traversal, how to compose, traverse and add multiple validation in lens composition?

        final Lens<Order, List<OrderDocument>> orderDocumentsLens =
                Lens.lens(Order::getOrderDocuments, ds -> cr -> cr.withOrderDocuments(ds));
        final Lens<OrderDocument, List<OrderItem>> orderItemsLens =
                Lens.lens(OrderDocument::getOrderItems, is -> crd -> crd.withOrderItems(is));

        final Lens<OrderItem, List<OrderItemProperties>> orderItemPropertiesLens =
                Lens.lens(OrderItem::getOrderItemProperties, sls -> i -> i.withOrderItemProperties(sls));

        final List<String> fail = orderDocumentsLens.composeTraversal(List.Optic.traversal())
                .composeLens(orderItemsLens).composeTraversal(List.Optic.traversal())
                .composeLens(orderItemPropertiesLens).composeTraversal(List.Optic.traversal())
                .modifyValidationF(Semigroup.stringSemigroup, this::validateItemProperties)
                .f(order)
                .accumulate().fail();


    private Validation<String, OrderItemProperties> validateItemProperties(OrderItemProperties properties) {
        return Validation.success(properties);
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions