Skip to main content

Squash

Types

Cursor

interface Cursor {
Bufbuffer
Posnumber
}

An import of the Redblox Buffit Cursor type for better cross-library interaction

SerDes

interface SerDes {
ser(
T...
) → ()
des(Cursor) → T...
}

Functions

print

Squash.print(cursorCursor) → ()

Pretty prints a Cursor record.

cursor

Squash.cursor(
sizenumber?,
positionnumber?
) → Cursor

frombuffer

Squash.frombuffer(bufbuffer) → Cursor

tobuffer

Squash.tobuffer(cursorCursor) → buffer

T

Squash.T(xSerDes<T>) → T

boolean

Squash.boolean() → {
ser(
boolean,
boolean?,
boolean?,
boolean?,
boolean?,
boolean?,
boolean?,
boolean?
) → (),
des(Cursor) → (
boolean,
boolean,
boolean,
boolean,
boolean,
boolean,
boolean,
boolean
)
}

uint

Squash.uint(bytesnumber) → SerDes<number>

Accuracy diminishes using 7 or 8 bytes.

int

Squash.int(bytesnumber) → SerDes<number>

Accuracy diminishes using 7 or 8 bytes.

number

Squash.number(bytesnumber) → SerDes<number>

Only supports 4 or 8 bytes.

vector

Squash.vector(serdesSerDes<number>) → SerDes<vector>

Either vector3 or vector4 depending on the Luau configuration's default vector width.

vector2

Squash.vector2(serdesSerDes<number>) → SerDes<vector>

The x, y components.

vector3

Squash.vector3(serdesSerDes<number>) → SerDes<vector>

The x, y, z components.

vector4

Squash.vector4(serdesSerDes<number>) → SerDes<vector>

The x, y, z, w components.

range

Squash.range(
minnumber,
maxnumber
) → SerDes<number>

The given min and max must be integers, and min < max. Uses the smallest uint representation for a given range.

string

Squash.string(lengthnumber?) → SerDes<string>

buffer

Squash.buffer(lengthnumber?) → SerDes<buffer>

vlq

Squash.vlq() → SerDes<number>

opt

Squash.opt(serdesSerDes<T>) → SerDes<T?>

array

Squash.array(
serdesSerDes<T>,
length(number | SerDes<number>)?
) → SerDes<{T}>

When passing a number as the length, it will optimize out the length entirely. If a number serializer is provided, it will serialize the length using that, else it will use a vlq. Will bitpack booleans and optional values.

tuple

Squash.tuple(...T...) → SerDes<T...>

record

Squash.record(schemaT) → SerDes<T>

Will bitpack booleans and optional values.

map

Squash.map(
keySerDesSerDes<K>,
valueSerDesSerDes<V>,
length(number | SerDes<number>)?
) → SerDes<{[K]V}>

When passing a number as the length, it will optimize out the length entirely. If a number serializer is provided, it will serialize the length using that, else it will use a vlq.

literal

Squash.literal(literals...any) → SerDes<any>

table

Squash.table(
schema{[string]SerDes<any>},
length(number | SerDes<number>)?
) → SerDes<any>

Serializes tables given a schema mapping types to serializers. If a type is not defined in the schema, it will be ignored when serializing tables. This is an expensive and heavy serializer compared to Record, Map, and Array. It is highly recommended that you do not use this for tables you know the type of already.

When passing a number as the length, it will optimize out the length entirely. If a number serializer is provided, it will serialize the length using that, else it will use a vlq.

Axes

Squash.Axes() → SerDes<Axes>

BrickColor

Squash.BrickColor() → SerDes<BrickColor>

EnumItem

Squash.EnumItem(enumEnum) → SerDes<EnumItem>

CatalogueSearchParams

Squash.CatalogueSearchParams() → SerDes<CatalogSearchParams>

CFrame

Squash.CFrame(positionSerDesSerDes<number>) → SerDes<CFrame>

rotation

Squash.rotation() → SerDes<CFrame>

Color3

Squash.Color3() → SerDes<Color3>

ColorSequenceKeypoint

Squash.ColorSequenceKeypoint() → SerDes<ColorSequenceKeypoint>

ColorSequence

Squash.ColorSequence() → SerDes<ColorSequence>

DateTime

Squash.DateTime() → SerDes<DateTime>

Faces

Squash.Faces() → SerDes<Faces>

FloatCurveKey

Squash.FloatCurveKey() → SerDes<FloatCurveKey>

Font

Squash.Font() → SerDes<Font>

NumberRange

Squash.NumberRange(serdesSerDes<number>) → SerDes<NumberRange>

NumberSequenceKeypoint

Squash.NumberSequenceKeypoint(serdesSerDes<number>) → SerDes<NumberSequenceKeypoint>

NumberSequence

Squash.NumberSequence(serdesSerDes<number>) → SerDes<NumberSequence>

OverlapParams

Squash.OverlapParams() → SerDes<OverlapParams>

RaycastParams

Squash.RaycastParams() → SerDes<RaycastParams>

Vector3

Squash.Vector3(serdesSerDes<number>) → SerDes<Vector3>

PathWaypoint

Squash.PathWaypoint(serdesSerDes<number>) → SerDes<PathWaypoint>

PhysicalProperties

Squash.PhysicalProperties() → SerDes<PhysicalProperties>

Ray

Squash.Ray(serdesSerDes<number>) → SerDes<Ray>

RaycastResult

Squash.RaycastResult(serdesSerDes<number>) → SerDes<SquashRaycastResult>

Types

interface SquashRaycastResult {
Distancenumber,
PositionVector3
NormalVector3
MaterialEnum.Material
}

Returns a SquashRaycastResult because Roblox does not allow instantiating RaycastResults.

Vector2

Squash.Vector2(serdesSerDes<number>) → SerDes<Vector2>

Rect

Squash.Rect(serdesSerDes<number>) → SerDes<Rect>

Region3

Squash.Region3(serdesSerDes<number>) → SerDes<Region3>

Region3int16

Squash.Region3int16() → SerDes<Region3int16>

RotationCurveKey

Squash.RotationCurveKey(positionSerDesSerDes<number>) → SerDes<RotationCurveKey>

TweenInfo

Squash.TweenInfo() → SerDes<TweenInfo>

UDim

Squash.UDim(serdesSerDes<number>) → SerDes<UDim>

UDim2

Squash.UDim2(serdesSerDes<number>) → SerDes<UDim2>

Vector2int16

Squash.Vector2int16() → SerDes<Vector2int16>

Vector3int16

Squash.Vector3int16() → SerDes<Vector3int16>
Show raw api
{
    "functions": [
        {
            "name": "print",
            "desc": "Pretty prints a Cursor record.",
            "params": [
                {
                    "name": "cursor",
                    "desc": "",
                    "lua_type": "Cursor"
                }
            ],
            "returns": [],
            "function_type": "static",
            "source": {
                "line": 18,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "cursor",
            "desc": "",
            "params": [
                {
                    "name": "size",
                    "desc": "",
                    "lua_type": "number?"
                },
                {
                    "name": "position",
                    "desc": "",
                    "lua_type": "number?"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "Cursor"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 24,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "frombuffer",
            "desc": "",
            "params": [
                {
                    "name": "buf",
                    "desc": "",
                    "lua_type": "buffer"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "Cursor"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 29,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "tobuffer",
            "desc": "",
            "params": [
                {
                    "name": "cursor",
                    "desc": "",
                    "lua_type": "Cursor"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "buffer"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 34,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "T",
            "desc": "",
            "params": [
                {
                    "name": "x",
                    "desc": "",
                    "lua_type": "SerDes<T>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "T"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 39,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "boolean",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "{ ser: (Cursor, boolean, boolean?, boolean?, boolean?, boolean?, boolean?, boolean?, boolean?) -> (), des: (Cursor) -> (boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean) }"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 43,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "uint",
            "desc": "Accuracy diminishes using 7 or 8 bytes.",
            "params": [
                {
                    "name": "bytes",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 51,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "int",
            "desc": "Accuracy diminishes using 7 or 8 bytes.",
            "params": [
                {
                    "name": "bytes",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 59,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "number",
            "desc": "Only supports 4 or 8 bytes.",
            "params": [
                {
                    "name": "bytes",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 67,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "vector",
            "desc": "Either vector3 or vector4 depending on the Luau configuration's default vector width.",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<vector>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 75,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "vector2",
            "desc": "The x, y components.",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<vector>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 81,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "vector3",
            "desc": "The x, y, z components.",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<vector>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 87,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "vector4",
            "desc": "The x, y, z, w components.",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<vector>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 93,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "range",
            "desc": "The given min and max must be integers, and min < max. Uses the smallest uint representation for a given range.",
            "params": [
                {
                    "name": "min",
                    "desc": "",
                    "lua_type": "number"
                },
                {
                    "name": "max",
                    "desc": "",
                    "lua_type": "number"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 102,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "string",
            "desc": "",
            "params": [
                {
                    "name": "length",
                    "desc": "",
                    "lua_type": "number?"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<string>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 182,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "buffer",
            "desc": "",
            "params": [
                {
                    "name": "length",
                    "desc": "",
                    "lua_type": "number?"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<buffer>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 189,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "vlq",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 195,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "opt",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<T>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<T?>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 202,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "array",
            "desc": "When passing a number as the length, it will optimize out the length entirely. If a number serializer is provided, it will serialize the length using that, else it will use a vlq. Will bitpack booleans and optional values.",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<T>"
                },
                {
                    "name": "length",
                    "desc": "",
                    "lua_type": "(number | SerDes<number>)?"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<{T}>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 211,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "tuple",
            "desc": "",
            "params": [
                {
                    "name": "...",
                    "desc": "",
                    "lua_type": "T..."
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<T...>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 218,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "record",
            "desc": "Will bitpack booleans and optional values.",
            "params": [
                {
                    "name": "schema",
                    "desc": "",
                    "lua_type": "T"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<T>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 226,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "map",
            "desc": "When passing a number as the length, it will optimize out the length entirely. If a number serializer is provided, it will serialize the length using that, else it will use a vlq.",
            "params": [
                {
                    "name": "keySerDes",
                    "desc": "",
                    "lua_type": "SerDes<K>"
                },
                {
                    "name": "valueSerDes",
                    "desc": "",
                    "lua_type": "SerDes<V>"
                },
                {
                    "name": "length",
                    "desc": "",
                    "lua_type": "(number | SerDes<number>)?"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<{[K]: V}>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 236,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "literal",
            "desc": "",
            "params": [
                {
                    "name": "literals",
                    "desc": "",
                    "lua_type": "... any"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<any>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 243,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "table",
            "desc": "Serializes tables given a schema mapping types to serializers.\nIf a type is not defined in the schema, it will be ignored when serializing tables.\n**This is an expensive and heavy serializer compared to Record, Map, and Array.**\n**It is highly recommended that you do not use this for tables you know the type of already.**\n\nWhen passing a number as the length, it will optimize out the length entirely. If a number serializer is provided, it will serialize the length using that, else it will use a vlq.",
            "params": [
                {
                    "name": "schema",
                    "desc": "",
                    "lua_type": "{ [string]: SerDes<any> }"
                },
                {
                    "name": "length",
                    "desc": "",
                    "lua_type": "(number | SerDes<number>)?"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<any>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 259,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Axes",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Axes>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 265,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "BrickColor",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<BrickColor>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 271,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "EnumItem",
            "desc": "",
            "params": [
                {
                    "name": "enum",
                    "desc": "",
                    "lua_type": "Enum"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<EnumItem>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 278,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "CatalogueSearchParams",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<CatalogSearchParams>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 284,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "CFrame",
            "desc": "",
            "params": [
                {
                    "name": "positionSerDes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<CFrame>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 291,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "rotation",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<CFrame>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 297,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Color3",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Color3>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 303,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "ColorSequenceKeypoint",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<ColorSequenceKeypoint>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 309,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "ColorSequence",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<ColorSequence>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 315,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "DateTime",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<DateTime>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 321,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Faces",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Faces>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 327,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "FloatCurveKey",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<FloatCurveKey>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 333,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Font",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Font>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 339,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "NumberRange",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<NumberRange>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 346,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "NumberSequenceKeypoint",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<NumberSequenceKeypoint>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 353,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "NumberSequence",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<NumberSequence>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 360,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "OverlapParams",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<OverlapParams>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 366,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "RaycastParams",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<RaycastParams>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 372,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Vector3",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Vector3>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 379,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "PathWaypoint",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<PathWaypoint>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 386,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "PhysicalProperties",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<PhysicalProperties>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 392,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Ray",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Ray>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 399,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "RaycastResult",
            "desc": "Returns a `SquashRaycastResult` because Roblox does not allow instantiating RaycastResults.",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<SquashRaycastResult>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 414,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Vector2",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Vector2>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 421,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Rect",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Rect>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 428,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Region3",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Region3>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 435,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Region3int16",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Region3int16>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 441,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "RotationCurveKey",
            "desc": "",
            "params": [
                {
                    "name": "positionSerDes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<RotationCurveKey>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 448,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "TweenInfo",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<TweenInfo>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 454,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "UDim",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<UDim>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 461,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "UDim2",
            "desc": "",
            "params": [
                {
                    "name": "serdes",
                    "desc": "",
                    "lua_type": "SerDes<number>"
                }
            ],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<UDim2>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 468,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Vector2int16",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Vector2int16>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 474,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "Vector3int16",
            "desc": "",
            "params": [],
            "returns": [
                {
                    "desc": "",
                    "lua_type": "SerDes<Vector3int16>"
                }
            ],
            "function_type": "static",
            "source": {
                "line": 480,
                "path": "src/moonwave.luau"
            }
        }
    ],
    "properties": [],
    "types": [
        {
            "name": "Cursor",
            "desc": "An import of the Redblox Buffit Cursor type for better cross-library interaction",
            "fields": [
                {
                    "name": "Buf",
                    "lua_type": "buffer",
                    "desc": ""
                },
                {
                    "name": "Pos",
                    "lua_type": "number",
                    "desc": ""
                }
            ],
            "source": {
                "line": 8,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "SerDes",
            "desc": "",
            "fields": [
                {
                    "name": "ser",
                    "lua_type": "(Cursor, T...) -> ()",
                    "desc": ""
                },
                {
                    "name": "des",
                    "lua_type": "(Cursor) -> T...",
                    "desc": ""
                }
            ],
            "source": {
                "line": 13,
                "path": "src/moonwave.luau"
            }
        },
        {
            "name": "SquashRaycastResult",
            "desc": "",
            "fields": [
                {
                    "name": "Distance",
                    "lua_type": "number,",
                    "desc": ""
                },
                {
                    "name": "Position",
                    "lua_type": "Vector3",
                    "desc": ""
                },
                {
                    "name": "Normal",
                    "lua_type": "Vector3",
                    "desc": ""
                },
                {
                    "name": "Material",
                    "lua_type": "Enum.Material",
                    "desc": ""
                }
            ],
            "source": {
                "line": 408,
                "path": "src/moonwave.luau"
            }
        }
    ],
    "name": "Squash",
    "desc": "",
    "source": {
        "line": 2,
        "path": "src/moonwave.luau"
    }
}