Skip to content

Commit

Permalink
Prepare for publishing
Browse files Browse the repository at this point in the history
  • Loading branch information
mihai-dinculescu committed Oct 20, 2022
1 parent aac950b commit ea9236f
Show file tree
Hide file tree
Showing 16 changed files with 706 additions and 28 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
toolchain: stable
override: true
- uses: davidB/rust-cargo-make@v1
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Run format
run: cargo make format
- name: Run check
Expand Down
27 changes: 27 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Crates.io
on:
release:
types:
- created
jobs:
publish:
name: Publish
runs-on: windows-2022
steps:
- uses: actions/checkout@v3
with:
ref: main
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- name: Run build
run: cargo build --release --verbose
- name: Run publish simconnect-sdk-derive
run: cargo publish -p simconnect-sdk-derive --token ${{ secrets.CRATES_IO_TOKEN }}
- name: Sleep for 30 seconds
run: Start-Sleep -s 30
shell: powershell
- name: Run publish simconnect-sdk
run: cargo publish -p simconnect-sdk --token ${{ secrets.CRATES_IO_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/security-audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
name: Audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
profile: minimal
Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Change Log

All notable changes to this project will be documented in this
file. This change log follows the conventions of
[keepachangelog.com][keepachangelog].

## [Unreleased]

## [v0.1.0] - 2022-10-22

### Initial Release of simconnect-sdk

[unreleased]: https://github.com/mihai-dinculescu/simconnect-sdk
[v0.1.0]: https://github.com/mihai-dinculescu/simconnect-sdk/tree/v0.1.0
[keepachangelog]: https://keepachangelog.com
30 changes: 30 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Contributing

Contributions are welcome and encouraged! See [/issues][issues] for ideas, or suggest your own!
If you're thinking to create a PR with large feature/change, please first discuss it in an issue.

## Releases

- Update version in `simconnect-sdk-derive/Cargo.toml`
- Update version in `simconnect-sdk/Cargo.toml` (crate + `simconnect-sdk-derive`)
- Update CHANGELOG.md
- Commit
- Add tag

```bash
git tag -a vX.X.X
```

- Push

```bash
git push --follow-tags
```

- Release\
Create a [new release][releases]. \
The `publish.yml` GitHub Action will pick it up and do the actual release to [crates.io][crates_io].

[issues]: https://github.com/mihai-dinculescu/simconnect-sdk/issues
[releases]: https://github.com/mihai-dinculescu/simconnect-sdk/releases
[crates_io]: https://crates.io
22 changes: 21 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
# SimConnect SDK in Rust

[![Crates][crates_badge]][crates]
[![Documentation][documentation_badge]][documentation]
[![CI][ci_badge]][ci]

[![license][license_badge]][license]
[![Crates.io][crates_downloads_badge]][crates]\
An opinionated SimConnect SDK that encapsulates the C API fully and optimizes for developer experience.

## Usage
Expand Down Expand Up @@ -83,6 +86,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {

See [more examples][examples].

## Contributing

Contributions are welcome and encouraged! See [/CONTRIBUTING.md][contributing].

## Feature table

### General
Expand Down Expand Up @@ -178,6 +185,19 @@ See [more examples][examples].
| SimConnect_CompleteCustomMissionAction | | |
| SimConnect_ExecuteMissionAction | | |

## Credits

Inspired by [Sequal32/simconnect-rust][inspired_by].

[crates_badge]: https://img.shields.io/crates/v/simconnect-sdk.svg
[crates]: https://crates.io/crates/simconnect-sdk
[documentation_badge]: https://docs.rs/simconnect-sdk/badge.svg
[documentation]: https://docs.rs/simconnect-sdk
[ci_badge]: https://github.com/mihai-dinculescu/simconnect-sdk/workflows/CI/badge.svg?branch=main
[ci]: https://github.com/mihai-dinculescu/simconnect-sdk/actions
[license_badge]: https://img.shields.io/crates/l/simconnect-sdk.svg
[license]: https://github.com/mihai-dinculescu/simconnect-sdk/blob/main/LICENSE
[crates_downloads_badge]: https://img.shields.io/crates/d/simconnect-sdk?label=downloads
[examples]: https://github.com/mihai-dinculescu/simconnect-sdk/tree/main/examples
[contributing]: https://github.com/mihai-dinculescu/simconnect-sdk/blob/main/CONTRIBUTING.md
[inspired_by]: https://github.com/Sequal32/simconnect-rust
10 changes: 7 additions & 3 deletions simconnect-sdk-derive/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
[package]
name = "simconnect-sdk-derive"
version = "0.1.0"
authors = ["Mihai Dinculescu <[email protected]>"]
edition = "2021"
description = "Macros of SimConnect SDK for Rust"
license = "MIT"
authors = ["Mihai Dinculescu <[email protected]>"]
description = "Macros implementation for SimConnect SDK"
keywords = ["simconnect", "MSFS-2020", "simulation", "aerospace"]
categories = ["aerospace", "simulation", "aerospace::simulation", "games"]
readme = "README.md"
repository = "https://github.com/mihai-dinculescu/simconnect-sdk"
include = ["src/**", "LICENSE", "README.md"]
autotests = false
publish = false

[lib]
proc-macro = true
Expand Down
21 changes: 21 additions & 0 deletions simconnect-sdk-derive/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2022 Mihai Dinculescu

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
203 changes: 203 additions & 0 deletions simconnect-sdk-derive/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
# SimConnect SDK in Rust

[![Crates][crates_badge]][crates]
[![Documentation][documentation_badge]][documentation]
[![CI][ci_badge]][ci]
[![license][license_badge]][license]
[![Crates.io][crates_downloads_badge]][crates]\
An opinionated SimConnect SDK that encapsulates the C API fully and optimizes for developer experience.

## Usage

```toml
[dependencies]
simconnect-sdk = { version = "0.1", features = ["derive"] }
```

```rust
use simconnect_sdk::{Notification, SimConnect, SimConnectObject};

/// A data structure that will be used to receive data from SimConnect.
/// See the documentation of `SimConnectObject` for more information on the arguments of the `simconnect` attribute.
#[derive(Debug, Clone, SimConnectObject)]
#[simconnect(period = "second")]
#[allow(dead_code)]
struct AirplaneData {
#[simconnect(name = "TITLE")]
title: String,
#[simconnect(name = "CATEGORY")]
category: String,
#[simconnect(name = "PLANE LATITUDE", unit = "degrees")]
lat: f64,
#[simconnect(name = "PLANE LONGITUDE", unit = "degrees")]
lon: f64,
#[simconnect(name = "PLANE ALTITUDE", unit = "feet")]
alt: f64,
#[simconnect(name = "SIM ON GROUND")]
sim_on_ground: bool,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = SimConnect::new("Receiving data example");

match client {
Ok(mut client) => {
let mut notifications_received = 0;

loop {
let notification = client.get_next_dispatch()?;

match notification {
Some(Notification::Open) => {
println!("Connection opened.");

// After the connection is successfully open, we register the struct
client.register_object::<AirplaneData>()?;
}
Some(Notification::Object(data)) => {
if let Ok(airplane_data) = AirplaneData::try_from(&data) {
println!("{airplane_data:?}");

notifications_received += 1;

// After we have received 10 notifications, we unregister the struct
if notifications_received > 10 {
client.unregister_object::<AirplaneData>()?;
println!("Subscription stopped.");
break;
}
}
}
_ => (),
}

// sleep for about a frame to reduce CPU usage
std::thread::sleep(std::time::Duration::from_millis(16));
}
}
Err(e) => {
println!("Error: {e:?}")
}
}

Ok(())
}
```

See [more examples][examples].

## Contributing

Contributions are welcome and encouraged! See [/CONTRIBUTING.md][contributing].

## Feature table

### General

| Feature | Status | Comment |
| --------------------------------------- | ------- | ----------- |
| DispatchProc | | |
| SimConnect_Open | &check; | |
| SimConnect_Close | &check; | |
| SimConnect_CallDispatch | | |
| SimConnect_GetNextDispatch | &check; | |
| SimConnect_RequestSystemState | | |
| SimConnect_MapClientEventToSimEvent | - | Coming soon |
| SimConnect_SubscribeToSystemEvent | | |
| SimConnect_SetSystemEventState | | |
| SimConnect_UnsubscribeFromSystemEvent | | |
| SimConnect_SetNotificationGroupPriority | - | Coming soon |

### Events And Data

| Feature | Status | Comment |
| -------------------------------------------- | ------- | ----------------------------------- |
| SimConnect_RequestDataOnSimObject | &check; | Only for SIMCONNECT_OBJECT_ID_USER |
| SimConnect_RequestDataOnSimObjectType | - | Coming soon |
| SimConnect_AddClientEventToNotificationGroup | - | Coming soon |
| SimConnect_RemoveClientEvent | | |
| SimConnect_TransmitClientEvent | | |
| SimConnect_TransmitClientEvent_EX1 | | |
| SimConnect_MapClientDataNameToID | | |
| SimConnect_RequestClientData | | |
| SimConnect_CreateClientData | | |
| SimConnect_AddToClientDataDefinition | | |
| SimConnect_AddToDataDefinition | &check; | Supports `f64`, `bool` and `String` |
| SimConnect_SetClientData | | |
| SimConnect_SetDataOnSimObject | | |
| SimConnect_ClearClientDataDefinition | | |
| SimConnect_ClearDataDefinition | &check; | |
| SimConnect_MapInputEventToClientEvent | | |
| SimConnect_RequestNotificationGroup | | |
| SimConnect_ClearInputGroup | | |
| SimConnect_ClearNotificationGroup | | |
| SimConnect_RequestReservedKey | | |
| SimConnect_SetInputGroupPriority | | |
| SimConnect_SetInputGroupState | | |
| SimConnect_RemoveInputEvent | | |

### AI Objects

| Feature | Status | Comment |
| ------------------------------------- | ------ | ------- |
| SimConnect_AICreateEnrouteATCAircraft | | |
| SimConnect_AICreateNonATCAircraft | | |
| SimConnect_AICreateParkedATCAircraft | | |
| SimConnect_AICreateSimulatedObject | | |
| SimConnect_AIReleaseControl | | |
| SimConnect_AIRemoveObject | | |
| SimConnect_AISetAircraftFlightPlan | | |

### Flights

| Feature | Status | Comment |
| ------------------------- | ------ | ------- |
| SimConnect_FlightLoad | | |
| SimConnect_FlightSave | | |
| SimConnect_FlightPlanLoad | | |

### Debug

| Feature | Status | Comment |
| ------------------------------- | ------ | ------- |
| SimConnect_GetLastSentPacketID | | |
| SimConnect_RequestResponseTimes | | |
| SimConnect_InsertString | | |
| SimConnect_RetrieveString | | |

### Facilities

| Feature | Status | Comment |
| -------------------------------------- | ------- | ------- |
| SimConnect_AddToFacilityDefinition | | |
| SimConnect_RequestFacilitesList | &check; | |
| SimConnect_RequestFacilitiesList_EX1 | | |
| SimConnect_RequestFacilityData | | |
| SimConnect_SubscribeToFacilities | &check; | |
| SimConnect_SubscribeToFacilities_EX1 | | |
| SimConnect_UnsubscribeToFacilities | &check; | |
| SimConnect_UnsubscribeToFacilities_EX1 | | |

### Missions

| Feature | Status | Comment |
| -------------------------------------- | ------ | ------- |
| SimConnect_CompleteCustomMissionAction | | |
| SimConnect_ExecuteMissionAction | | |

## Credits

Inspired by [Sequal32/simconnect-rust][inspired_by].

[crates_badge]: https://img.shields.io/crates/v/simconnect-sdk.svg
[crates]: https://crates.io/crates/simconnect-sdk
[documentation_badge]: https://docs.rs/simconnect-sdk/badge.svg
[documentation]: https://docs.rs/simconnect-sdk
[ci_badge]: https://github.com/mihai-dinculescu/simconnect-sdk/workflows/CI/badge.svg?branch=main
[ci]: https://github.com/mihai-dinculescu/simconnect-sdk/actions
[license_badge]: https://img.shields.io/crates/l/simconnect-sdk.svg
[license]: https://github.com/mihai-dinculescu/simconnect-sdk/blob/main/LICENSE
[crates_downloads_badge]: https://img.shields.io/crates/d/simconnect-sdk?label=downloads
[examples]: https://github.com/mihai-dinculescu/simconnect-sdk/tree/main/examples
[contributing]: https://github.com/mihai-dinculescu/simconnect-sdk/blob/main/CONTRIBUTING.md
[inspired_by]: https://github.com/Sequal32/simconnect-rust
7 changes: 2 additions & 5 deletions simconnect-sdk-derive/src/fields.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,11 +148,8 @@ pub fn extract_attribute_properties(
}
lit => {
return Err(syn::Error::new_spanned(
nv,
format!(
"Expected {:?}, found {:?}",
property.field_type, lit
),
lit,
format!("Expected {:?}", property.field_type,),
)
.to_compile_error())
}
Expand Down
Loading

0 comments on commit ea9236f

Please sign in to comment.