50 lines
1.1 KiB
Nix
50 lines
1.1 KiB
Nix
|
{ lib }:
|
||
|
let
|
||
|
inherit (import ./internal.nix { inherit lib; }) _ipv6;
|
||
|
in
|
||
|
{
|
||
|
ipv6 = {
|
||
|
/**
|
||
|
Creates an `IPv6Address` object from an IPv6 address as a string. If
|
||
|
the prefix length is omitted, it defaults to 64. The parser is limited
|
||
|
to the first two versions of IPv6 addresses addressed in RFC 4291.
|
||
|
The form "x:x:x:x:x:x:d.d.d.d" is not yet implemented. Addresses are
|
||
|
NOT compressed, so they are not always the same as the canonical text
|
||
|
representation of IPv6 addresses defined in RFC 5952.
|
||
|
|
||
|
# Type
|
||
|
|
||
|
```
|
||
|
fromString :: String -> IPv6Address
|
||
|
```
|
||
|
|
||
|
# Examples
|
||
|
|
||
|
```nix
|
||
|
fromString "2001:DB8::ffff/32"
|
||
|
=> {
|
||
|
address = "2001:db8:0:0:0:0:0:ffff";
|
||
|
prefixLength = 32;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
# Arguments
|
||
|
|
||
|
- [addr] An IPv6 address with optional prefix length.
|
||
|
*/
|
||
|
fromString =
|
||
|
addr:
|
||
|
let
|
||
|
splittedAddr = _ipv6.split addr;
|
||
|
|
||
|
addrInternal = splittedAddr.address;
|
||
|
prefixLength = splittedAddr.prefixLength;
|
||
|
|
||
|
address = _ipv6.toStringFromExpandedIp addrInternal;
|
||
|
in
|
||
|
{
|
||
|
inherit address prefixLength;
|
||
|
};
|
||
|
};
|
||
|
}
|