nip/examples/types_example.nim

57 lines
1.6 KiB
Nim

## Learning Nim Types for NexusOS Package Management
## This demonstrates object, enum, and seq types
import std/strformat
echo "=== Learning Nim Types for NexusOS ==="
# Example 1: Enum for package streams
type
PackageStream* = enum
Stable = "stable"
Testing = "testing"
Dev = "dev"
LTS = "lts"
echo "\n1. Package Streams (enum):"
let stream1 = Stable
let stream2 = Testing
echo fmt"Stream 1: {stream1}, Stream 2: {stream2}"
# Example 2: Object for package metadata
type
PackageId* = object
name*: string
version*: string
stream*: PackageStream
echo "\n2. Package Objects:"
let pkg1 = PackageId(name: "neofetch", version: "7.1.0", stream: Stable)
let pkg2 = PackageId(name: "htop", version: "3.2.1", stream: Testing)
echo fmt"Package 1: {pkg1.name}-{pkg1.version} [{pkg1.stream}]"
echo fmt"Package 2: {pkg2.name}-{pkg2.version} [{pkg2.stream}]"
# Example 3: Sequences (dynamic arrays)
echo "\n3. Package Collections (seq):"
var packages: seq[PackageId] = @[]
packages.add(pkg1)
packages.add(pkg2)
packages.add(PackageId(name: "vim", version: "9.0", stream: LTS))
echo fmt"Total packages: {packages.len}"
for i, pkg in packages:
echo fmt" {i+1}. {pkg.name}-{pkg.version} [{pkg.stream}]"
# Example 4: String formatting with $
proc `$`*(pkg: PackageId): string =
fmt"{pkg.name}-{pkg.version}[{pkg.stream}]"
echo "\n4. Custom string formatting:"
for pkg in packages:
echo fmt"Package: {pkg}"
echo "\n=== Key Takeaways ==="
echo "- enum: Fixed options (Stable, Testing, etc.)"
echo "- object: Structured data (name, version, stream)"
echo "- seq: Dynamic lists for collections"
echo "- proc `$`: Custom string representation"