Documentation

LE009: MULTI-MODULE E-COMMERCE CART (STRUCTS + MAPS + RESULT + TRAITS)

Back to documentation index
---
{
  "@context": "https://nxdlang.org/schema",
  "doc_id": "LE009",
  "title": "",
  "description": "",
  "layer": "Examples",
  "category": "Large Examples",
  "keywords": [],
  "doc_version": "1.0",
  "status": "active"
}
---

# LE009: MULTI-MODULE E-COMMERCE CART (STRUCTS + MAPS + RESULT + TRAITS)

### NXD
```nxd
MODULE cart.core

TYPE ITEM { ID: int, NAME: string, PRICE: int }
TYPE RESULT UNION { OK(any), ERR(string) }

LET CATALOG SET MAP<int, ITEM> {
    1: ITEM { ID: 1, NAME: "mouse", PRICE: 25 },
    2: ITEM { ID: 2, NAME: "keyboard", PRICE: 45 }
}

TYPE CART { ITEMS: LIST<ITEM> }

FUNC ADD(C: CART, ID: int): RESULT:
    IF NOT (CATALOG HAS ID):
        RETURN ERR("missing item")
    PUSH C.ITEMS, CATALOG[ID]
    RETURN OK("added")

FUNC TOTAL(C: CART): int:
    LET SUM SET 0
    LOOP I IN C.ITEMS:
        SUM SET SUM ADD I.PRICE
    RETURN SUM


MODULE app.main
IMPORT cart.core

FUNC MAIN():
    LET C SET CART { ITEMS: [] }

    PRINTLN(ADD(C, 1))
    PRINTLN(ADD(C, 2))
    PRINTLN("total=" ADD TOTAL(C))

    RETURN NONE
```