Files
fil/docs/snippets/zig/plugins/min_length_validator.md
Henrik Jess Nielsen b4c07d3693
All checks were successful
Deploy fil (kreuzberg) / deploy (push) Successful in 49s
Nomad changes
2026-06-01 23:40:55 +02:00

1.4 KiB

const std = @import("std");
const kreuzberg = @import("kreuzberg");

const MinLengthValidator = struct {
    min_length: usize,

    pub fn validate(self: *MinLengthValidator, result: [*c]const u8, config: [*c]const u8) !void {
        _ = config;
        const slice = std.mem.sliceTo(result, 0);
        if (slice.len < self.min_length) return error.Validation;
    }

    pub fn should_validate(self: *MinLengthValidator, result: [*c]const u8, config: [*c]const u8) i32 {
        _ = self;
        _ = result;
        _ = config;
        return 1;
    }

    pub fn priority(self: *MinLengthValidator) i32 {
        _ = self;
        return 100;
    }
};

pub fn main() !void {
    var instance = MinLengthValidator{ .min_length = 50 };
    var vtable = kreuzberg.make_validator_vtable(MinLengthValidator, &instance);

    vtable.name_fn = struct {
        fn thunk(user_data: ?*anyopaque, out_name: ?*?[*c]u8) callconv(.C) void {
            _ = user_data;
            if (out_name) |ptr| ptr.* = @constCast("min-length-validator");
        }
    }.thunk;
    vtable.version_fn = struct {
        fn thunk(user_data: ?*anyopaque, out_version: ?*?[*c]u8) callconv(.C) void {
            _ = user_data;
            if (out_version) |ptr| ptr.* = @constCast("1.0.0");
        }
    }.thunk;

    var out_error: ?[*c]u8 = null;
    _ = kreuzberg.register_validator("min-length-validator", vtable, &instance, &out_error);
}