Skip to main content

Go (Golang)

Project Information

Installation

go get github.com/QuantumDMN/dmn-go-sdk

Usage

Below is an example of how to initialize the client and evaluate a decision.

package main

import (
"context"
"encoding/json"
"fmt"
"os"

"github.com/QuantumDMN/dmn-go-sdk/pkg/quantumdmn"
"github.com/google/uuid"
)

func main() {
// Configuration
apiURL := "https://api.quantumdmn.com"
authURL := "https://auth.quantumdmn.com"
keyFile := "path/to/service-user.json"
projectIDStr := "YOUR_DMN_PROJECT_ID"
definitionID := "YOUR_DEFINITION_ID"
// Zitadel project ID for audience scope (different from DMN project ID)
zitadelProjectID := "YOUR_ZITADEL_PROJECT_ID"

ctx := context.Background()

// 1. Parse Project ID
pID, err := uuid.Parse(projectIDStr)
if err != nil {
panic(err)
}

// 2. Create Token Provider
tokenProvider, err := quantumdmn.NewZitadelTokenProvider(keyFile, authURL, zitadelProjectID)
if err != nil {
panic(err)
}

// 3. Create Engine Client
client, err := quantumdmn.NewEngineClient(apiURL, pID, tokenProvider)
if err != nil {
panic(err)
}

// 4. Prepare Context
evalContext := map[string]interface{}{
"RequestedAmt": 1000,
}

fmt.Printf("Evaluating definition %s in project %s...\n", definitionID, projectIDStr)

// 5. Evaluate
result, err := client.Evaluate(ctx, definitionID, evalContext)
if err != nil {
panic(err)
}

// 6. usage of result
resultJSON, _ := json.MarshalIndent(result, "", " ")
fmt.Printf("Result:\n%s\n", resultJSON)
}