value); Structure::addFormat(APP_DATABASE_ATTRIBUTE_DATETIME, function () { return new DatetimeValidator(); }, ColumnType::Datetime->value); Structure::addFormat(APP_DATABASE_ATTRIBUTE_ENUM, function ($attribute) { $elements = $attribute['formatOptions']['elements'] ?? []; return new WhiteList($elements, true); }, ColumnType::String->value); Structure::addFormat(APP_DATABASE_ATTRIBUTE_IP, function () { return new IP(); }, ColumnType::String->value); Structure::addFormat(APP_DATABASE_ATTRIBUTE_URL, function () { return new URL(); }, ColumnType::String->value); Structure::addFormat(APP_DATABASE_ATTRIBUTE_INT_RANGE, function ($attribute) { $min = $attribute['formatOptions']['min'] ?? -INF; $max = $attribute['formatOptions']['max'] ?? INF; return new Range($min, $max, Range::TYPE_INTEGER); }, ColumnType::Integer->value); Structure::addFormat(APP_DATABASE_ATTRIBUTE_FLOAT_RANGE, function ($attribute) { $min = $attribute['formatOptions']['min'] ?? -INF; $max = $attribute['formatOptions']['max'] ?? INF; return new Range($min, $max, Range::TYPE_FLOAT); }, ColumnType::Float->value);