starlark/values/types/
record.rs

1/*
2 * Copyright 2019 The Starlark in Rust Authors.
3 * Copyright (c) Facebook, Inc. and its affiliates.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *     https://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18//! A `record` type, comprising of a fixed set of fields.
19//!
20//! Calling `record()` produces a `RecordType`. Calling `RecordType` produces a [`Record`].
21//! The field names of the record are only stored once, potentially reducing memory usage.
22//! Created in Starlark using the `record()` function, which accepts keyword arguments.
23//! The keys become field names, and values are the types. Calling the resulting
24//! function produces an actual record.
25//!
26//! ```
27//! # starlark::assert::is_true(r#"
28//! IpAddress = record(host=str, port=int)
29//! rec = IpAddress(host="localhost", port=80)
30//! rec.port == 80
31//! # "#);
32//! ```
33//!
34//! It is also possible to use `field(type, default)` type to give defaults:
35//!
36//! ```
37//! # starlark::assert::is_true(r#"
38//! IpAddress = record(host=str, port=field(int, 80))
39//! rec = IpAddress(host="localhost")
40//! rec.port == 80
41//! # "#);
42//! ```
43
44pub(crate) mod field;
45pub(crate) mod globals;
46pub(crate) mod instance;
47pub(crate) mod matcher;
48pub(crate) mod record_type;
49pub(crate) mod ty_record_type;
50
51pub use crate::values::record::instance::Record;