Skip to content

Commit 458d299

Browse files
committed
Expose NostrDatabase and Events structs
1 parent 0f4e46c commit 458d299

16 files changed

+3214
-266
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
* Expose `UnwrappedGift` ([Yuki Kishimoto])
4444
* Expose `Client::handle_notifications` ([Yuki Kishimoto])
4545
* Expose subscribe `Client` methods ([Yuki Kishimoto])
46+
* Expose `NostrDatabase` and `Events` structs ([Yuki Kishimoto])
4647

4748
### Fixed
4849

lib/nostr_sdk.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,5 @@ export 'src/rust/api/client/builder.dart';
1919
export 'src/rust/api/client/notification.dart';
2020
export 'src/rust/api/client/options.dart';
2121
export 'src/rust/api/client/output.dart';
22+
export 'src/rust/api/database.dart';
23+
export 'src/rust/api/database/events.dart';

lib/src/rust/api/client.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import '../frb_generated.dart';
77
import 'client/builder.dart';
88
import 'client/notification.dart';
99
import 'client/output.dart';
10+
import 'database/events.dart';
1011
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
1112
import 'protocol/event.dart';
1213
import 'protocol/event/builder.dart';
@@ -74,7 +75,7 @@ abstract class Client implements RustOpaqueInterface {
7475
///
7576
/// If `gossip` is enabled (see [`Options::gossip`]) the events will be requested also to
7677
/// NIP65 relays (automatically discovered) of public keys included in filters (if any).
77-
Future<List<Event>> fetchEvents(
78+
Future<Events> fetchEvents(
7879
{required Filter filter, required Duration timeout});
7980

8081
/// Disconnect and force remove all relays

lib/src/rust/api/database.dart

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// This file is automatically generated, so please do not edit it.
2+
// Generated by `flutter_rust_bridge`@ 2.0.0.
3+
4+
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
5+
6+
import '../frb_generated.dart';
7+
import 'database/events.dart';
8+
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
9+
import 'package:freezed_annotation/freezed_annotation.dart' hide protected;
10+
import 'protocol/event.dart';
11+
import 'protocol/event/id.dart';
12+
import 'protocol/filter.dart';
13+
part 'database.freezed.dart';
14+
15+
// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `deref`, `from`, `from`, `from`
16+
17+
// Rust type: RustOpaqueMoi<flutter_rust_bridge::for_generated::RustAutoOpaqueInner<_NostrDatabase>>
18+
abstract class NostrDatabase implements RustOpaqueInterface {
19+
Future<BigInt> count({required Filter filter});
20+
21+
/// Delete all events that match the `Filter`
22+
Future<void> delete({required Filter filter});
23+
24+
/// Get [`Event`] by [`EventId`]
25+
Future<Event?> eventById({required EventId eventId});
26+
27+
/// LMDB backend
28+
static NostrDatabase lmdb({required String path}) =>
29+
NostrSdk.instance.api.crateApiDatabaseNostrDatabaseLmdb(path: path);
30+
31+
Future<Events> query({required Filter filter});
32+
33+
/// Save [`Event`] into store
34+
Future<SaveEventStatus> saveEvent({required Event event});
35+
36+
/// Wipe all data
37+
Future<void> wipe();
38+
}
39+
40+
/// Reason why event wasn't stored into the database
41+
enum RejectedReason {
42+
/// Ephemeral events aren't expected to be stored
43+
ephemeral,
44+
45+
/// The event already exists
46+
duplicate,
47+
48+
/// The event was deleted
49+
deleted,
50+
51+
/// The event is expired
52+
expired,
53+
54+
/// The event was replaced
55+
replaced,
56+
57+
/// Attempt to delete a non-owned event
58+
invalidDelete,
59+
60+
/// Other reason
61+
other,
62+
;
63+
}
64+
65+
@freezed
66+
sealed class SaveEventStatus with _$SaveEventStatus {
67+
const SaveEventStatus._();
68+
69+
/// The event has been successfully saved
70+
const factory SaveEventStatus.success() = SaveEventStatus_Success;
71+
72+
/// The event has been rejected
73+
const factory SaveEventStatus.rejected(
74+
RejectedReason field0,
75+
) = SaveEventStatus_Rejected;
76+
}

0 commit comments

Comments
 (0)