Skip to main content

Module interface_lock

Module interface_lock 

Source
Expand description

The per-package interfaces.lock (lock design §2): the line table that gives every interface of a package its number.

The file lives in the package directory beside the .ridl sources, one per package, and only ridl lock writes it. Its form is a line table:

# interfaces.lock — written by ridl lock; do not edit by hand.
next 6
CruiseControl 1
LaneAssist 2 retired
LaneKeeping 3
DoorControl 4
service:veh.hvac.cabin 5
  • The first content line is next N: N is greater than every number in the file, live or retired, and is never lowered. ridl lock allocates from N upward. The line is found by position — the first line the reader does not skip — so every later line is an entry, one keyed next included: next is not a keyword, and an interface may be named so (plan decision PD-19).
  • Every later line is one entry, Key number, with the word retired after the number for a retired entry. Fields are separated by one space. An entry’s number never changes and no entry is ever removed (lock design §4): a rename rewrites the key in place, a retire adds the word.
  • The key is a declared interface’s name, or service: followed by the dotted name of the service whose inline shape the entry numbers (lock design §3). The prefix is needed because interface cabin and service cabin check clean together in one package.

The reader (parse) skips an empty line and every line whose first non-blank byte is #, and trims trailing whitespace (plan decision PD-7); everything else must parse. A git conflict marker line does not parse. The writer (InterfaceLock::render) always emits the header, next N, and the entries in number order, one \n after each line, so a rendered lock parses back to the same table.

This module is pure text in, table out, and compiles without the fs feature so the wasm32-unknown-unknown build carries the reader; only read and [write] touch the filesystem. The compiler reports a malformed file as RIDL-410 on the offending line (lock design §8): the loader wraps the LockError this module returns, which is why the error carries a byte range and no diagnostic code.

Structs§

InterfaceLock
The parsed table.
InvalidLockKey
Why a token is not a LockKey.
LockEntry
One line of the table.
LockError
Why a text is not a lock file: the first malformed shape found, reading top to bottom, and the byte range of the offending line — or the empty range at 0 when the text is empty or has no next line (plan decision PD-3).

Enums§

LockEditError
Why an in-memory edit cannot be applied.
LockKey
One entry’s key: which interface body the entry numbers.
MergeOutcome
What ridl lock merge writes to OURS (lock design §6).

Constants§

FILE_NAME
The file’s name inside the package directory.
HEADER
The first line of every written file. The reader ignores it like any other # line; the writer and the merge driver both emit it.

Functions§

merge
A three-way merge over entries, not lines (lock design §6): the git merge driver’s whole computation, with no file access.
parse
Parses the text of an interfaces.lock.
read
The raw text of dir/interfaces.lock, or None when the file does not exist. Parsing is the caller’s, so a malformed file can be reported with its text (RIDL-410 needs the line). Any other I/O failure — a file that is not valid UTF-8 included — is the error.
write
Writes lock to dir/interfaces.lock, replacing any existing file.