Skip to content

Commit 63ef1be

Browse files
authored
Merge pull request #3 from contextgeneric/v0.4.0
Update website for v0.4.0 release
2 parents f2b4f1d + 4e21575 commit 63ef1be

23 files changed

+1171
-374
lines changed

code/Cargo.lock

+49-71
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

code/Cargo.toml

+20-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,23 @@ name = "abstract-name"
1212
path = "bin/abstract_name.rs"
1313

1414
[dependencies]
15-
cgp = { version = "0.3.0" }
15+
cgp = { version = "0.4.0" }
16+
17+
[patch.crates-io]
18+
# cgp = { git = "https://github.com/contextgeneric/cgp.git" }
19+
# cgp-core = { git = "https://github.com/contextgeneric/cgp.git" }
20+
# cgp-extra = { git = "https://github.com/contextgeneric/cgp.git" }
21+
# cgp-async = { git = "https://github.com/contextgeneric/cgp.git" }
22+
# cgp-async-macro = { git = "https://github.com/contextgeneric/cgp.git" }
23+
# cgp-component = { git = "https://github.com/contextgeneric/cgp.git" }
24+
# cgp-macro = { git = "https://github.com/contextgeneric/cgp.git" }
25+
# cgp-macro-lib = { git = "https://github.com/contextgeneric/cgp.git" }
26+
# cgp-type = { git = "https://github.com/contextgeneric/cgp.git" }
27+
# cgp-field = { git = "https://github.com/contextgeneric/cgp.git" }
28+
# cgp-error = { git = "https://github.com/contextgeneric/cgp.git" }
29+
# cgp-error-extra = { git = "https://github.com/contextgeneric/cgp.git" }
30+
# cgp-error-anyhow = { git = "https://github.com/contextgeneric/cgp.git" }
31+
# cgp-run = { git = "https://github.com/contextgeneric/cgp.git" }
32+
# cgp-runtime = { git = "https://github.com/contextgeneric/cgp.git" }
33+
# cgp-sync = { git = "https://github.com/contextgeneric/cgp.git" }
34+
# cgp-inner = { git = "https://github.com/contextgeneric/cgp.git" }

code/bin/abstract_name.rs

+13-19
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,26 @@ use core::fmt::Display;
33
use cgp::prelude::*; // Import all CGP constructs
44

55
// Derive CGP provider traits and blanket implementations
6-
#[cgp_component {
7-
name: GreeterComponent, // Name of the CGP component
8-
provider: Greeter, // Name of the provider trait
9-
}]
6+
#[cgp_component(Greeter)]
107
pub trait CanGreet // Name of the consumer trait
118
{
129
fn greet(&self);
1310
}
1411

1512
// Declare a CGP abstract type `Name`
16-
cgp_type!(Name);
13+
#[cgp_type]
14+
pub trait HasNameType {
15+
type Name;
16+
}
1717

1818
// A getter trait representing a dependency for `name` value
1919
#[cgp_auto_getter] // Derive blanket implementation
2020
pub trait HasName: HasNameType {
2121
fn name(&self) -> &Self::Name;
2222
}
2323

24-
// A provider that implements `Greeter`
25-
pub struct GreetHello;
26-
2724
// Implement `Greeter` that is generic over `Context`
25+
#[cgp_new_provider]
2826
impl<Context> Greeter<Context> for GreetHello
2927
where
3028
Context: HasName, // Inject the `name` dependency from `Context`
@@ -37,24 +35,20 @@ where
3735
}
3836

3937
// A concrete context that uses CGP components
38+
#[cgp_context]
4039
#[derive(HasField)] // Deriving `HasField` automatically implements `HasName`
4140
pub struct Person {
4241
pub name: String,
4342
}
4443

45-
// The CGP components mapping for `Person`
46-
pub struct PersonComponents;
47-
48-
// Set CGP components used by `Person` to be `PersonComponents`
49-
impl HasComponents for Person {
50-
type Components = PersonComponents;
51-
}
52-
5344
// Compile-time wiring of CGP components
54-
delegate_components! {
45+
delegate_and_check_components! {
46+
CanUsePerson for Person; // Define check trait to check implementation on Person
5547
PersonComponents {
56-
NameTypeComponent: UseType<String>,
57-
GreeterComponent: GreetHello, // Use `GreetHello` to provide `Greeter`
48+
NameTypeProviderComponent:
49+
UseType<String>, // Instantiate the `Name` type to `String`
50+
GreeterComponent:
51+
GreetHello, // Use `GreetHello` to provide `Greeter`
5852
}
5953
}
6054

code/bin/hello.rs

+5-16
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
use cgp::prelude::*; // Import all CGP constructs
22

33
// Derive CGP provider traits and blanket implementations
4-
#[cgp_component {
5-
name: GreeterComponent, // Name of the CGP component
6-
provider: Greeter, // Name of the provider trait
7-
}]
4+
#[cgp_component(Greeter)]
85
pub trait CanGreet // Name of the consumer trait
96
{
107
fn greet(&self);
@@ -16,10 +13,8 @@ pub trait HasName {
1613
fn name(&self) -> &String;
1714
}
1815

19-
// A provider that implements `Greeter`
20-
pub struct GreetHello;
21-
2216
// Implement `Greeter` that is generic over `Context`
17+
#[cgp_new_provider]
2318
impl<Context> Greeter<Context> for GreetHello
2419
where
2520
Context: HasName, // Inject the `name` dependency from `Context`
@@ -31,21 +26,15 @@ where
3126
}
3227

3328
// A concrete context that uses CGP components
29+
#[cgp_context]
3430
#[derive(HasField)] // Deriving `HasField` automatically implements `HasName`
3531
pub struct Person {
3632
pub name: String,
3733
}
3834

39-
// The CGP components mapping for `Person`
40-
pub struct PersonComponents;
41-
42-
// Set CGP components used by `Person` to be `PersonComponents`
43-
impl HasComponents for Person {
44-
type Components = PersonComponents;
45-
}
46-
4735
// Compile-time wiring of CGP components
48-
delegate_components! {
36+
delegate_and_check_components! {
37+
CanUsePerson for Person;
4938
PersonComponents {
5039
GreeterComponent: GreetHello, // Use `GreetHello` to provide `Greeter`
5140
}

code/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

config.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ juice_logo_name = "Context-Generic Programming"
2222
juice_extra_menu = [
2323
{ title = "Blog", link = "/blog"},
2424
{ title = "Book", link = "https://patterns.contextgeneric.dev"},
25-
{ title = "GitHub", link = "https://github.com/contextgeneric"},
25+
{ title = "GitHub", link = "https://github.com/contextgeneric/cgp"},
2626
]

0 commit comments

Comments
 (0)