Cursor rule
.cursor/rules/ffi.mdcFFI (Foreign Function Interface) guidelines for skia-rs-ffi
Cursor rules
Quality
45/100
Scores the file, not the repository.Length
248 words
4 headings · 1 code blocksRepository
28
— · pushed 21 days agoLast changed
3 days ago
First indexed 3 days ago.1234567# FFI Guidelines89## C API Design1011- All FFI functions in `skia-rs-ffi`12- Use opaque pointers for complex types13- Follow Skia's C API naming: `sk_{type}_{method}`14- Always check for null pointers1516```rust17// skia-rs-ffi/src/lib.rs1819/// Create a new paint object.20///21/// # Safety22/// Returns a valid pointer that must be freed with `sk_paint_delete`.23#[no_mangle]24pub unsafe extern "C" fn sk_paint_new() -> *mut Paint {25 Box::into_raw(Box::new(Paint::new()))26}2728/// Delete a paint object.29///30/// # Safety31/// `paint` must be a valid pointer returned by `sk_paint_new`.32#[no_mangle]33pub unsafe extern "C" fn sk_paint_delete(paint: *mut Paint) {34 if !paint.is_null() {35 drop(Box::from_raw(paint));36 }37}3839/// Set the paint color.40///41/// # Safety42/// `paint` must be a valid pointer.43#[no_mangle]44pub unsafe extern "C" fn sk_paint_set_color(paint: *mut Paint, color: u32) {45 if let Some(p) = paint.as_mut() {46 p.set_color32(Color(color));47 }48}49```5051## Type Mappings5253| Skia C++ | Rust | C FFI |54|----------|------|-------|55| `SkScalar` | `Scalar` (f32) | `float` |56| `SkPoint` | `Point` | `sk_point_t` |57| `SkRect` | `Rect` | `sk_rect_t` |58| `SkColor` | `Color` | `uint32_t` |59| `SkMatrix` | `Matrix` | `sk_matrix_t` |60| `SkPath*` | `*mut Path` | `sk_path_t*` |61| `SkPaint*` | `*mut Paint` | `sk_paint_t*` |62| `SkCanvas*` | `*mut Canvas` | `sk_canvas_t*` |6364## Safety Requirements6566- All FFI functions must be marked `unsafe`67- Document safety requirements in doc comments68- Check for null pointers before dereferencing69- Use `#[repr(C)]` for all FFI-visible structs70
Also in quinnjr/skia-rs
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| quinnjr/skia-rs.cursor/rules/api-design.mdc · 28 | Cursor rules | buildstyleapi | 58/100 | 3 days ago | |
| quinnjr/skia-rs.cursor/rules/architecture.mdc · 28 | Cursor rules | archdependenciesmonorepo | 62/100 | 3 days ago | |
| quinnjr/skia-rs.cursor/rules/benchmarking.mdc · 28 | Cursor rules | styleperformance | 69/100 | 3 days ago | |
| quinnjr/skia-rs.cursor/rules/code-style.mdc · 28 | Cursor rules | styletypesperformancedeployment+1 | 62/100 | 3 days ago | |
| quinnjr/skia-rs.cursor/rules/commands.mdc · 28 | Cursor rules | buildtestlint-formatgit+4 | 82/100 | 3 days ago | |
| quinnjr/skia-rs.cursor/rules/fuzzing.mdc · 28 | Cursor rules | setupstyle | 69/100 | 3 days ago | |
| quinnjr/skia-rs.cursor/rules/gpu.mdc · 28 | Cursor rules | no sections | 36/100 | 3 days ago | |
| quinnjr/skia-rs.cursor/rules/testing.mdc · 28 | Cursor rules | test | 69/100 | 3 days ago |
Diff against .cursor/rules/api-design.mdc Diff against .cursor/rules/architecture.mdc Diff against .cursor/rules/benchmarking.mdc Diff against .cursor/rules/code-style.mdc Diff against .cursor/rules/commands.mdc Diff against .cursor/rules/fuzzing.mdc Diff against .cursor/rules/gpu.mdc Diff against .cursor/rules/testing.mdc
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 45 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 3 days ago | |
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 3 days ago | |
| dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 3 days ago | |
| Allymahmoud/case-intake-platform.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 3 days ago | |
| markstev/mark-starter.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+6 | 99/100 | 3 days ago | |
| deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 3 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 3 days ago | |
| TechSquidTV/Hermes.cursor/rules/20-hermes-api-tests.mdc · 45 | Cursor rules | teststyletesting-strategysecurity+3 | 97/100 | 3 days ago |
