Function fromDot [src]

Prototype

pub fn fromDot(dot_notation: []const u8, out: []u8) InitError!Oid

Parameters

dot_notation: []const u8out: []u8

Possible Errors

InvalidCharacter ParseIntError

The input was empty or contained an invalid character.

MissingPrefix
Overflow ParseIntError

The result cannot fit in the type specified.

WriteFailed Error

See the Writer implementation for detailed diagnostics.

Example

test fromDot { var buf: [256]u8 = undefined; for (test_cases) |t| { const actual = try fromDot(t.dot_notation, &buf); try std.testing.expectEqualSlices(u8, t.encoded, actual.encoded); } }

Source

pub fn fromDot(dot_notation: []const u8, out: []u8) InitError!Oid { var split = std.mem.splitScalar(u8, dot_notation, '.'); const first_str = split.next() orelse return error.MissingPrefix; const second_str = split.next() orelse return error.MissingPrefix; const first = try std.fmt.parseInt(u8, first_str, 10); const second = try std.fmt.parseInt(u8, second_str, 10); var writer: std.Io.Writer = .fixed(out); try writer.writeByte(first * 40 + second); var i: usize = 1; while (split.next()) |s| { var parsed = try std.fmt.parseUnsigned(Arc, s, 10); const n_bytes = if (parsed == 0) 0 else std.math.log(Arc, encoding_base, parsed); for (0..n_bytes) |j| { const place = std.math.pow(Arc, encoding_base, n_bytes - @as(Arc, @intCast(j))); const digit: u8 = @intCast(@divFloor(parsed, place)); try writer.writeByte(digit | 0x80); parsed -= digit * place; i += 1; } try writer.writeByte(@intCast(parsed)); i += 1; } return .{ .encoded = writer.buffered() }; }