Skip to content

Commit 4f0fe1c

Browse files
author
Paolo Tranquilli
committed
Rust: bazel packaging
1 parent 3da6cee commit 4f0fe1c

File tree

28 files changed

+207
-28
lines changed

28 files changed

+207
-28
lines changed

MODULE.bazel

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,20 @@ r.from_cargo(
6363
)
6464
use_repo(r, ruby_deps = "rd")
6565

66+
rsp = use_extension(
67+
"@rules_rust//crate_universe:extension.bzl",
68+
"crate",
69+
isolate = True,
70+
)
71+
rsp.from_cargo(
72+
name = "rs_deps",
73+
cargo_lockfile = "//rust/extractor:Cargo.lock",
74+
manifests = [
75+
"//rust/extractor:Cargo.toml",
76+
],
77+
)
78+
use_repo(rsp, rust_deps = "rs_deps")
79+
6680
dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet")
6781
dotnet.toolchain(dotnet_version = "8.0.101")
6882
use_repo(dotnet, "dotnet_toolchains")

misc/codegen/generators/rustgen.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def _get_type(t: str) -> str:
2626

2727

2828
def _get_field(cls: schema.Class, p: schema.Property) -> rust.Field:
29-
table_name = None
29+
table_name = inflection.tableize(cls.name)
3030
if not p.is_single:
3131
table_name = f"{cls.name}_{p.name}"
3232
if p.is_predicate:
@@ -47,11 +47,12 @@ def _get_field(cls: schema.Class, p: schema.Property) -> rust.Field:
4747

4848

4949
def _get_properties(
50-
cls: schema.Class, lookup: dict[str, schema.Class]
51-
) -> typing.Iterable[schema.Property]:
50+
cls: schema.Class, lookup: dict[str, schema.Class],
51+
) -> typing.Iterable[tuple[schema.Class, schema.Property]]:
5252
for b in cls.bases:
5353
yield from _get_properties(lookup[b], lookup)
54-
yield from cls.properties
54+
for p in cls.properties:
55+
yield cls, p
5556

5657

5758
class Processor:
@@ -63,8 +64,8 @@ def _get_class(self, name: str) -> rust.Class:
6364
return rust.Class(
6465
name=name,
6566
fields=[
66-
_get_field(cls, p)
67-
for p in _get_properties(cls, self._classmap)
67+
_get_field(c, p)
68+
for c, p in _get_properties(cls, self._classmap)
6869
if "rust_skip" not in p.pragmas and not p.synth
6970
],
7071
table_name=inflection.tableize(cls.name),

misc/codegen/lib/rust.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def get_field_override(field: str):
7878
class Field:
7979
field_name: str
8080
base_type: str
81-
table_name: str = None
81+
table_name: str
8282
is_optional: bool = False
8383
is_repeated: bool = False
8484
is_unordered: bool = False
@@ -121,8 +121,12 @@ class Class:
121121
fields: list[Field] = dataclasses.field(default_factory=list)
122122

123123
@property
124-
def single_fields(self):
125-
return [f for f in self.fields if f.is_single]
124+
def single_field_entries(self):
125+
ret = {self.table_name: []}
126+
for f in self.fields:
127+
if f.is_single:
128+
ret.setdefault(f.table_name, []).append(f)
129+
return [{"table_name": k, "fields": v} for k, v in ret.items()]
126130

127131

128132
@dataclasses.dataclass

misc/codegen/templates/rust_classes.mustache

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ impl TrapEntry for {{name}} {
1818
}
1919

2020
fn emit<W: Write>(self, id: TrapLabel, out: &mut W) -> std::io::Result<()> {
21-
write!(out, "{{table_name}}({id}{{#single_fields}}, {}{{/single_fields}})\n"{{#single_fields}}, {{#emitter}}self.{{field_name}}{{/emitter}}{{/single_fields}})?;
21+
{{#single_field_entries}}
22+
write!(out, "{{table_name}}({id}{{#fields}}, {}{{/fields}})\n"{{#fields}}, {{#emitter}}self.{{field_name}}{{/emitter}}{{/fields}})?;
23+
{{/single_field_entries}}
2224
{{#fields}}
2325
{{#is_predicate}}
2426
if self.{{field_name}} {

rust/.idea/.gitignore

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/.idea/misc.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/.idea/rust.iml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/BUILD.bazel

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,55 @@
1-
exports_files([
2-
"codegen.conf",
3-
"schema.py",
4-
])
1+
load("@rules_pkg//pkg:mappings.bzl", "pkg_filegroup")
2+
load(
3+
"//misc/bazel:pkg.bzl",
4+
"codeql_pack",
5+
"codeql_pkg_files",
6+
)
7+
8+
package(default_visibility = ["//rust:__subpackages__"])
9+
10+
filegroup(
11+
name = "schema",
12+
srcs = ["schema.py"],
13+
)
14+
15+
filegroup(
16+
name = "schema-includes",
17+
srcs = glob(["*.dbscheme"]),
18+
)
19+
20+
filegroup(
21+
name = "codegen-conf",
22+
srcs = ["codegen.conf"],
23+
)
24+
25+
codeql_pkg_files(
26+
name = "tools-arch",
27+
exes = ["//rust/extractor"],
28+
prefix = "{CODEQL_PLATFORM}",
29+
)
30+
31+
pkg_filegroup(
32+
name = "tools",
33+
srcs = [
34+
":tools-arch",
35+
"//rust/tools",
36+
],
37+
prefix = "tools",
38+
)
39+
40+
codeql_pkg_files(
41+
name = "root-files",
42+
srcs = [
43+
"codeql-extractor.yml",
44+
"ql/lib/rust.dbscheme",
45+
"ql/lib/rust.dbscheme.stats",
46+
],
47+
)
48+
49+
codeql_pack(
50+
name = "rust",
51+
srcs = [
52+
":root-files",
53+
":tools",
54+
],
55+
)

0 commit comments

Comments
 (0)