57 lines
1.6 KiB
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" |