@startuml

class Parameter {
  - Name: string
  - Value: string
}

class Container {
  - Image: string
  - Command: string[]
  - Args: string[]
}

class VolumeMount {
  - Name: string
  - MountPath: string
}

class Task {
  - Name: string
  - Template: string
  - Dependencies: string[]
}

class Dag {
  - Tasks: Task[]
}

class Template {
  - Name: string
  - Inputs: struct
}

class VolumeClaimTemplate {
  - Metadata: struct
  - Spec: VolumeSpec
}

class VolumeSpec {
  - AccessModes: string[]
  - Resources: struct
}

class ArgoBuilder {
  - graph: Graph
  - branches: string[][]
  - Workflow: Workflow
}

class Workflow {
  - ApiVersion: string
  - Kind: string
  - Metadata: struct
}

class Spec {
  - Entrypoint: string
  - Arguments: Parameter[]
  - Volumes: VolumeClaimTemplate[]
  - Templates: Template[]
}

Parameter -- Task
Container -- Template
VolumeMount -- Container
Task -- Dag
Dag -- Template
Template -- Spec
VolumeClaimTemplate -- Spec
VolumeSpec -- VolumeClaimTemplate
Workflow -- ArgoBuilder
Spec -- Workflow

@enduml
