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 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]!} }
}

back to examples

Parsing IP v6

module main

import khalyomede.ip { Ipv6 }

fn main() {
  address := Ipv6.parse("2001:db8:3333:4444:5555:6666:7777:8888") or { Ipv6{} }
}

back to examples

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"
}

back to examples

Casting Ipv4 to string

module main

import khalyomede.ip { Ipv4 }

fn main() {
  address := Ipv4{}

  assert "${address}" == "0.0.0.0"
}

back to examples

Casting Ipv6 to string

module main

import khalyomede.ip { Ipv6 }

fn main() {
  address := Ipv6{}

  assert "${address}" == "::"
}

back to examples

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"
}

back to examples

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"
}

back to examples

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"
}

back to examples

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()) }
  }
}

back to examples

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
}

back to examples