Prompts
For joining this event, please clarify the tools and LLMs you are using.
Splitting service/layer {name} into its own crate
- Goals & constraints
- Extract `core/src/{kind}s/{name}` into a new crate `core/{kind}s/{name}`, crate name `opendal-{kind}-{name}`, while keeping the public surface (`opendal::{kind}s::{Name}`) unchanged.
- Preserve the existing feature flag: `services-{name}` for services, `layers-{name}` for layers. No behavior-test changes.
- Steps
1) Workspace & dependencies
- Create `core/{kind}s/{name}/Cargo.toml`: depend on `opendal-core` (path, default-features=false); move all {kind}-specific third-party deps/versions here.
- In root crate `core/Cargo.toml`:
- Add optional dependency `opendal-{kind}-{name}`.
- Map feature `services-{name}` -> `["dep:opendal-service-{name}"]` or `layers-{name}` -> `["dep:opendal-layer-{name}"]`.
- In `core/core/Cargo.toml`, remove this {kind}’s feature and its deps.
2) Code migration
- Move all `core/core/src/{kind}s/{name}/**` into `core/{kind}s/{name}/src/`, flatten modules in `lib.rs` (`mod backend; ...` or layer-specific modules) and re-export public types (`pub use backend::{NameBuilder as Name}` / layer types).
- Remove `mod {name}; pub use {name}::*;` from `core/core/src/{kind}s/mod.rs`.
- Fix imports: `crate::` -> `opendal_core::` (or `crate::` inside the new crate); resolve visibility by making shared helpers `pub` in core rather than duplicating.
- Registration: if applicable, keep `#[ctor] fn register() { DEFAULT_OPERATOR_REGISTRY.register::<Name>(SCHEME); }` in the new crate.
3) Facade re-export
- In `core/src/lib.rs`, under the relevant feature gate, `pub use opendal-{kind}-{name}::*;` so `opendal::{kind}s::{Name}` remains available.
4) Docs & examples
- Update docs/examples imports to the new crate (or facade) paths.
- If core docs/examples depended on this {kind}, optionally swap to another built-in {kind} during the migration to keep docs building.
5) Tests & behavior
- Move unit/integration tests with the code (keep paths/features). If core tests reference it, ensure they go through the facade feature.
- Minimal verify: `cargo check -p opendal-{kind}-{name}`; optionally `cargo check -p opendal --features {kind}s-{name}`.
6) Cleanup & compatibility
- Delete sources and deps from core.
- If external use needs a core-private helper, expose it (`pub`) instead of duplicating.
- Risks to watch
- Cross-crate visibility: widen visibility rather than copy code.
- Preserve existing API/feature names and behavior.
Tasks
Prompts
For joining this event, please clarify the tools and LLMs you are using.
Splitting service/layer {name} into its own crate - Goals & constraints - Extract `core/src/{kind}s/{name}` into a new crate `core/{kind}s/{name}`, crate name `opendal-{kind}-{name}`, while keeping the public surface (`opendal::{kind}s::{Name}`) unchanged. - Preserve the existing feature flag: `services-{name}` for services, `layers-{name}` for layers. No behavior-test changes. - Steps 1) Workspace & dependencies - Create `core/{kind}s/{name}/Cargo.toml`: depend on `opendal-core` (path, default-features=false); move all {kind}-specific third-party deps/versions here. - In root crate `core/Cargo.toml`: - Add optional dependency `opendal-{kind}-{name}`. - Map feature `services-{name}` -> `["dep:opendal-service-{name}"]` or `layers-{name}` -> `["dep:opendal-layer-{name}"]`. - In `core/core/Cargo.toml`, remove this {kind}’s feature and its deps. 2) Code migration - Move all `core/core/src/{kind}s/{name}/**` into `core/{kind}s/{name}/src/`, flatten modules in `lib.rs` (`mod backend; ...` or layer-specific modules) and re-export public types (`pub use backend::{NameBuilder as Name}` / layer types). - Remove `mod {name}; pub use {name}::*;` from `core/core/src/{kind}s/mod.rs`. - Fix imports: `crate::` -> `opendal_core::` (or `crate::` inside the new crate); resolve visibility by making shared helpers `pub` in core rather than duplicating. - Registration: if applicable, keep `#[ctor] fn register() { DEFAULT_OPERATOR_REGISTRY.register::<Name>(SCHEME); }` in the new crate. 3) Facade re-export - In `core/src/lib.rs`, under the relevant feature gate, `pub use opendal-{kind}-{name}::*;` so `opendal::{kind}s::{Name}` remains available. 4) Docs & examples - Update docs/examples imports to the new crate (or facade) paths. - If core docs/examples depended on this {kind}, optionally swap to another built-in {kind} during the migration to keep docs building. 5) Tests & behavior - Move unit/integration tests with the code (keep paths/features). If core tests reference it, ensure they go through the facade feature. - Minimal verify: `cargo check -p opendal-{kind}-{name}`; optionally `cargo check -p opendal --features {kind}s-{name}`. 6) Cleanup & compatibility - Delete sources and deps from core. - If external use needs a core-private helper, expose it (`pub`) instead of duplicating. - Risks to watch - Cross-crate visibility: widen visibility rather than copy code. - Preserve existing API/feature names and behavior.Tasks