IP
November 24, 2025 ยท View on GitHub
IP v4 / v6 structs to parse and render IPs.
module main
import khalyomede.ip { Ipv4 }
fn main() {
address := Ipv4.parse("192.168.1.1") or { Ipv4{} }
}
Summary
About
This package parses IP v4 / v6 and ensures IPs are valid before manipulation.
Features
- Parses IPv4 and IPv6
- Returns error if IP v4/v6 are invalid during parse
- Can be cast to string and canonical format ("full format" for IP v6)
Installation
Using V installer
Run this command in the root of your project:
v install khalyomede/ip
Examples
- Parsing
- Casting
- Matching
- Checking
- Comparison
Parsing IP v4
module main
import khalyomede.ip { Ipv4 }
fn main() {
address := Ipv4.parse("8.8.8.8") or { Ipv4{address: [u8(8), 8, 8, 8]!} }
}
Parsing IP v6
module main
import khalyomede.ip { Ipv6 }
fn main() {
address := Ipv6.parse("2001:db8:3333:4444:5555:6666:7777:8888") or { Ipv6{} }
}
Parsing any string to an IP V4 or V6
Use this method if you are not sure the provided string is an IP V4 or V6.
module main
import khalyomede.ip { Address, Ipv4, Ipv6 }
fn main() {
address := Address.parse("192.168.1.1")!
ip_address := match address {
Ipv4 { address.str() }
Ipv6 { address.to_full_string() }
}
assert ip_address == "192.168.1.1"
}
Casting Ipv4 to string
module main
import khalyomede.ip { Ipv4 }
fn main() {
address := Ipv4{}
assert "${address}" == "0.0.0.0"
}
Casting Ipv6 to string
module main
import khalyomede.ip { Ipv6 }
fn main() {
address := Ipv6{}
assert "${address}" == "::"
}
Casting IPv6 to full string
module main
import khalyomede.ip { Ipv6 }
fn main() {
address := Ipv6.parse("2001:db8::1") or { Ipv6{} }
assert address.to_full_string() == "2001:0db8:0000:0000:0000:0000:0000:0001"
}
Check a string is a valid IP V4
Use this method if you only need to verify the validity of an IP V4.
module main
import khalyomede.ip { Ipv4 }
fn main() {
message := match Ipv4.is_valid("192.168.1.1") {
true { "Valid IP V4" }
false { "Invalid IP V4" }
}
assert message == "Valid IP V4"
}
Check a string is a valid IP V6
Use this method if you only need to verify the validity of an IP V6.
module main
import khalyomede.ip { Ipv6 }
fn main() {
message := match Ipv6.is_valid("192.168.1.1") {
true { "Valid IP V6" }
false { "Invalid IP V6" }
}
assert message == "Valid IP V6"
}
Use the Address sum type to match both types
If you want to create functions that can return either an Ipv4 or Ipv6, use the Address sum type.
module main
import khalyomede.ip { Address, Ipv4, Ipv6 }
fn get_ip() Address {
return Address(Ipv4{address: [u8(192), 168, 1, 1]!})
}
fn main() {
address := get_ip()
match address {
Ipv4 { println(address) }
Ipv6 { println(address.to_full_string()) }
}
}
Comparing two Ipv6
module main
import khalyomede.ip { Ipv6 }
fn main() {
first_address := Ipv6.parse("2001:db8::1") or { Ipv6{} }
second_address := Ipv6.parse("2001:0db8:0000:0000:0000:0000:0000:0001") or { Ipv6{} }
assert first_address == second_address
}