Skip to content

Commit d1aed1c

Browse files
committed
feat: 生成二进制文件时支持伪类
1 parent 5ec6de0 commit d1aed1c

File tree

6 files changed

+37
-4
lines changed

6 files changed

+37
-4
lines changed

__test__/fixure/style.bin

0 Bytes
Binary file not shown.

__test__/index.spec.mjs.snap

-1 Bytes
Binary file not shown.

flatbuffers/stylesheet.fbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ table Selector {
7777
table Style {
7878
declarations:[DeclarationTuple];
7979
media:uint8;
80+
pseudo:uint8;
8081
selector:[Selector];
8182
}
8283

src/lib.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ mod tests {
105105

106106
#[test]
107107
fn test_valid_input() {
108-
let json_input = json!({"fonts":[],"keyframes":[],"medias":[],"styles":[{"declarations":[[22,293],[42,4278753764u32]],"media":0,"selector":["app"]},{"declarations":[[41,4294901760u32]],"media":0,"selector":["tit"]},{"declarations":[[29,24],[41,4291979550u32]],"media":0,"selector":["tit",2,"app"]},{"declarations":[[22,100],[25,100]],"media":0,"selector":["img"]}]}).to_string();
108+
let json_input = json!({"fonts":[],"keyframes":[],"medias":[],"styles":[{"declarations":[[22,293],[42,4278753764u32]],"media":0,"selector":["app"]},{"declarations":[[41,4294901760u32]],"media":0,"selector":["tit"]},{"declarations":[[29,24],[41,4291979550u32]],"media":0,"selector":["tit",2,"app"]},{"declarations":[[22,100],[25,100]],"media":0,"selector":["img"]}, {"declarations":[[79,"hello"]],"media":0,"pseudo":1,"selector":["hello"]}]}).to_string();
109109

110110
let result = convert_json_to_flatbuffer(&json_input);
111111
assert!(result.is_ok());
@@ -124,7 +124,7 @@ mod tests {
124124

125125
// 验证 styles
126126
let styles = style_sheet.styles().unwrap();
127-
assert_eq!(styles.len(), 4); // 根据实际情况调整
127+
assert_eq!(styles.len(), 5); // 根据实际情况调整
128128
let first_style = styles.get(0);
129129
assert_eq!(first_style.declarations().unwrap().len(), 2);
130130

@@ -149,6 +149,20 @@ mod tests {
149149
assert_eq!(first_selector.string_value().unwrap(), "tit");
150150
let second_selector = selector.get(1);
151151
assert_eq!(second_selector.integer_value(), 2);
152-
152+
153+
let fourth_style = styles.get(3);
154+
assert_eq!(fourth_style.declarations().unwrap().len(), 2);
155+
let selector = fourth_style.selector().unwrap();
156+
assert_eq!(selector.len(), 1);
157+
let first_selector = selector.get(0);
158+
assert_eq!(first_selector.string_value().unwrap(), "img");
159+
160+
let fifth_style = styles.get(4);
161+
assert_eq!(fifth_style.declarations().unwrap().len(), 1);
162+
let selector = fifth_style.selector().unwrap();
163+
assert_eq!(selector.len(), 1);
164+
let first_selector = selector.get(0);
165+
assert_eq!(first_selector.string_value().unwrap(), "hello");
166+
assert_eq!(fifth_style.pseudo(), 1);
153167
}
154168
}

src/stylesheet_generated.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2236,7 +2236,8 @@ impl<'a> flatbuffers::Follow<'a> for Style<'a> {
22362236
impl<'a> Style<'a> {
22372237
pub const VT_DECLARATIONS: flatbuffers::VOffsetT = 4;
22382238
pub const VT_MEDIA: flatbuffers::VOffsetT = 6;
2239-
pub const VT_SELECTOR: flatbuffers::VOffsetT = 8;
2239+
pub const VT_PSEUDO: flatbuffers::VOffsetT = 8;
2240+
pub const VT_SELECTOR: flatbuffers::VOffsetT = 10;
22402241

22412242
#[inline]
22422243
pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
@@ -2250,6 +2251,7 @@ impl<'a> Style<'a> {
22502251
let mut builder = StyleBuilder::new(_fbb);
22512252
if let Some(x) = args.selector { builder.add_selector(x); }
22522253
if let Some(x) = args.declarations { builder.add_declarations(x); }
2254+
builder.add_pseudo(args.pseudo);
22532255
builder.add_media(args.media);
22542256
builder.finish()
22552257
}
@@ -2270,6 +2272,13 @@ impl<'a> Style<'a> {
22702272
unsafe { self._tab.get::<u8>(Style::VT_MEDIA, Some(0)).unwrap()}
22712273
}
22722274
#[inline]
2275+
pub fn pseudo(&self) -> u8 {
2276+
// Safety:
2277+
// Created from valid Table for this object
2278+
// which contains a valid value in this slot
2279+
unsafe { self._tab.get::<u8>(Style::VT_PSEUDO, Some(0)).unwrap()}
2280+
}
2281+
#[inline]
22732282
pub fn selector(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<Selector<'a>>>> {
22742283
// Safety:
22752284
// Created from valid Table for this object
@@ -2287,6 +2296,7 @@ impl flatbuffers::Verifiable for Style<'_> {
22872296
v.visit_table(pos)?
22882297
.visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<DeclarationTuple>>>>("declarations", Self::VT_DECLARATIONS, false)?
22892298
.visit_field::<u8>("media", Self::VT_MEDIA, false)?
2299+
.visit_field::<u8>("pseudo", Self::VT_PSEUDO, false)?
22902300
.visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<Selector>>>>("selector", Self::VT_SELECTOR, false)?
22912301
.finish();
22922302
Ok(())
@@ -2295,6 +2305,7 @@ impl flatbuffers::Verifiable for Style<'_> {
22952305
pub struct StyleArgs<'a> {
22962306
pub declarations: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<DeclarationTuple<'a>>>>>,
22972307
pub media: u8,
2308+
pub pseudo: u8,
22982309
pub selector: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<Selector<'a>>>>>,
22992310
}
23002311
impl<'a> Default for StyleArgs<'a> {
@@ -2303,6 +2314,7 @@ impl<'a> Default for StyleArgs<'a> {
23032314
StyleArgs {
23042315
declarations: None,
23052316
media: 0,
2317+
pseudo: 0,
23062318
selector: None,
23072319
}
23082320
}
@@ -2322,6 +2334,10 @@ impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> StyleBuilder<'a, 'b, A> {
23222334
self.fbb_.push_slot::<u8>(Style::VT_MEDIA, media, 0);
23232335
}
23242336
#[inline]
2337+
pub fn add_pseudo(&mut self, pseudo: u8) {
2338+
self.fbb_.push_slot::<u8>(Style::VT_PSEUDO, pseudo, 0);
2339+
}
2340+
#[inline]
23252341
pub fn add_selector(&mut self, selector: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<Selector<'b >>>>) {
23262342
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(Style::VT_SELECTOR, selector);
23272343
}
@@ -2345,6 +2361,7 @@ impl core::fmt::Debug for Style<'_> {
23452361
let mut ds = f.debug_struct("Style");
23462362
ds.field("declarations", &self.declarations());
23472363
ds.field("media", &self.media());
2364+
ds.field("pseudo", &self.pseudo());
23482365
ds.field("selector", &self.selector());
23492366
ds.finish()
23502367
}

src/utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,7 @@ pub fn convert_json_to_flatbuffer(json_str: &str) -> Result<Vec<u8>, serde_json:
520520
styles::Style::create(&mut builder, &styles::StyleArgs {
521521
declarations: Some(declarations),
522522
media: style["media"].as_u64().unwrap() as u8,
523+
pseudo: style["pseudo"].as_u64().unwrap_or(0) as u8,
523524
selector: Some(selector),
524525
})
525526
}).collect();

0 commit comments

Comments
 (0)