Skip to content

Commit 05b1487

Browse files
authored
Merge pull request #3 from thoven87/drop-actor
2 parents 7226d5a + 2b009a8 commit 05b1487

13 files changed

+332
-368
lines changed

README.md

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ A comprehensive Swift 6 library for parsing and creating iCalendar (RFC 5545) ev
1010

1111
- **RFC Compliant**: Full support for RFC 5545, RFC 5546, RFC 6868, RFC 7529, and RFC 7986
1212
- **Swift 6 Ready**: Complete Sendable conformance and structured concurrency support
13-
- **Type Safe**: Uses structs instead of classes with comprehensive type safety
14-
- **Actor-based**: Parser and serializer use actors for thread-safe operations
13+
- **Type Safe**: Uses structs instead of classes with comprehensive type operations
1514
- **Comprehensive**: Support for events, todos, journals, alarms, time zones, and recurrence rules
1615
- **Builder Pattern**: Fluent API for easy calendar and event creation
1716
- **Extensible**: Support for custom properties and extensions
@@ -62,7 +61,7 @@ var calendar = client.createCalendar(productId: "-//My App//EN")
6261
calendar.addEvent(event)
6362

6463
// Serialize to iCalendar format
65-
let icalString = try await client.serializeCalendar(calendar)
64+
let icalString = try client.serializeCalendar(calendar)
6665
print(icalString)
6766
```
6867

@@ -84,7 +83,7 @@ END:VEVENT
8483
END:VCALENDAR
8584
"""
8685

87-
let calendar = try await client.parseCalendar(from: icalContent)
86+
let calendar = try client.parseCalendar(from: icalContent)
8887
print("Found \(calendar.events.count) events")
8988
```
9089

@@ -266,7 +265,7 @@ let serializationOptions = ICalendarSerializer.SerializationOptions(
266265
)
267266

268267
let serializer = ICalendarSerializer(options: serializationOptions)
269-
let serialized = try await serializer.serialize(calendar)
268+
let serialized = try serializer.serialize(calendar)
270269
```
271270

272271
## Structured Concurrency Support
@@ -275,17 +274,17 @@ The library is built with Swift 6 structured concurrency in mind:
275274

276275
```swift
277276
// Concurrent parsing of multiple calendars
278-
async let calendar1 = client.parseCalendar(from: content1)
279-
async let calendar2 = client.parseCalendar(from: content2)
280-
async let calendar3 = client.parseCalendar(from: content3)
277+
let calendar1 = client.parseCalendar(from: content1)
278+
let calendar2 = client.parseCalendar(from: content2)
279+
let calendar3 = client.parseCalendar(from: content3)
281280

282-
let calendars = try await [calendar1, calendar2, calendar3]
281+
let calendars = try [calendar1, calendar2, calendar3]
283282

284283
// Process calendars concurrently
285-
await withTaskGroup { group in
284+
withTaskGroup { group in
286285
for calendar in calendars {
287286
group.addTask {
288-
let serialized = try await client.serializeCalendar(calendar)
287+
let serialized = try client.serializeCalendar(calendar)
289288
// Process serialized calendar...
290289
}
291290
}
@@ -343,8 +342,8 @@ let firstMonday = RecurrencePatterns.monthly(
343342

344343
```swift
345344
do {
346-
let calendar = try await client.parseCalendar(from: icalContent)
347-
let serialized = try await client.serializeCalendar(calendar)
345+
let calendar = try client.parseCalendar(from: icalContent)
346+
let serialized = try client.serializeCalendar(calendar)
348347
} catch ICalendarError.invalidFormat(let message) {
349348
print("Invalid format: \(message)")
350349
} catch ICalendarError.missingRequiredProperty(let property) {
@@ -360,7 +359,7 @@ do {
360359

361360
```swift
362361
// Validate a calendar
363-
try await client.validateCalendar(calendar)
362+
try client.validateCalendar(calendar)
364363

365364
// Validate email addresses
366365
ValidationUtilities.isValidEmail("user@example.com") // true
@@ -374,19 +373,19 @@ ValidationUtilities.isValidPercentComplete(75) // true (0-100)
374373

375374
```swift
376375
// Outlook-compatible format
377-
let outlookFormat = await serializer.serializeForOutlook(calendar)
376+
let outlookFormat = serializer.serializeForOutlook(calendar)
378377

379378
// Google Calendar format
380-
let googleFormat = await serializer.serializeForGoogle(calendar)
379+
let googleFormat = serializer.serializeForGoogle(calendar)
381380

382381
// Pretty-printed format for debugging
383-
let prettyFormat = await serializer.serializePretty(calendar)
382+
let prettyFormat = serializer.serializePretty(calendar)
384383
```
385384

386385
## Statistics and Analysis
387386

388387
```swift
389-
let stats = await client.getCalendarStatistics(calendar)
388+
let stats = client.getCalendarStatistics(calendar)
390389
print(stats.description)
391390
// Output:
392391
// Calendar Statistics:

Sources/ICalendar/ICalendar.swift

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -49,50 +49,50 @@ public struct ICalendarClient: Sendable {
4949
// MARK: - Parsing Operations
5050

5151
/// Parse iCalendar content from string
52-
public func parseCalendar(from content: String) async throws -> ICalendar {
52+
public func parseCalendar(from content: String) throws -> ICalendar {
5353
let parser = ICalendarParser()
5454

5555
if configuration.validateOnParse {
56-
return try await parser.parseAndValidate(content)
56+
return try parser.parseAndValidate(content)
5757
} else {
58-
return try await parser.parse(content)
58+
return try parser.parse(content)
5959
}
6060
}
6161

6262
/// Parse iCalendar content from data
63-
public func parseCalendar(from data: Data) async throws -> ICalendar {
63+
public func parseCalendar(from data: Data) throws -> ICalendar {
6464
let parser = ICalendarParser()
6565

6666
if configuration.validateOnParse {
67-
let calendar = try await parser.parse(data)
68-
try await parser.validate(calendar)
67+
let calendar = try parser.parse(data)
68+
try parser.validate(calendar)
6969
return calendar
7070
} else {
71-
return try await parser.parse(data)
71+
return try parser.parse(data)
7272
}
7373
}
7474

7575
/// Parse iCalendar file from URL
76-
public func parseCalendar(from url: URL) async throws -> ICalendar {
76+
public func parseCalendar(from url: URL) throws -> ICalendar {
7777
let parser = ICalendarParser()
7878

7979
if configuration.validateOnParse {
80-
let calendar = try await parser.parseFile(at: url)
81-
try await parser.validate(calendar)
80+
let calendar = try parser.parseFile(at: url)
81+
try parser.validate(calendar)
8282
return calendar
8383
} else {
84-
return try await parser.parseFile(at: url)
84+
return try parser.parseFile(at: url)
8585
}
8686
}
8787

8888
/// Parse multiple calendars from content
89-
public func parseCalendars(from content: String) async throws -> [ICalendar] {
89+
public func parseCalendars(from content: String) throws -> [ICalendar] {
9090
let parser = ICalendarParser()
91-
let calendars = try await parser.parseMultiple(content)
91+
let calendars = try parser.parseMultiple(content)
9292

9393
if configuration.validateOnParse {
9494
for calendar in calendars {
95-
try await parser.validate(calendar)
95+
try parser.validate(calendar)
9696
}
9797
}
9898

@@ -102,43 +102,43 @@ public struct ICalendarClient: Sendable {
102102
// MARK: - Serialization Operations
103103

104104
/// Serialize calendar to string
105-
public func serializeCalendar(_ calendar: ICalendar) async throws -> String {
105+
public func serializeCalendar(_ calendar: ICalendar) throws -> String {
106106
let serializer = ICalendarSerializer(
107107
options: ICalendarSerializer.SerializationOptions(
108108
validateBeforeSerializing: configuration.validateOnSerialize
109109
)
110110
)
111-
return try await serializer.serialize(calendar)
111+
return try serializer.serialize(calendar)
112112
}
113113

114114
/// Serialize calendar to data
115-
public func serializeCalendar(_ calendar: ICalendar) async throws -> Data {
115+
public func serializeCalendar(_ calendar: ICalendar) throws -> Data {
116116
let serializer = ICalendarSerializer(
117117
options: ICalendarSerializer.SerializationOptions(
118118
validateBeforeSerializing: configuration.validateOnSerialize
119119
)
120120
)
121-
return try await serializer.serializeToData(calendar)
121+
return try serializer.serializeToData(calendar)
122122
}
123123

124124
/// Serialize calendar to file
125-
public func serializeCalendar(_ calendar: ICalendar, to url: URL) async throws {
125+
public func serializeCalendar(_ calendar: ICalendar, to url: URL) throws {
126126
let serializer = ICalendarSerializer(
127127
options: ICalendarSerializer.SerializationOptions(
128128
validateBeforeSerializing: configuration.validateOnSerialize
129129
)
130130
)
131-
try await serializer.serializeToFile(calendar, url: url)
131+
try serializer.serializeToFile(calendar, url: url)
132132
}
133133

134134
/// Serialize multiple calendars
135-
public func serializeCalendars(_ calendars: [ICalendar]) async throws -> String {
135+
public func serializeCalendars(_ calendars: [ICalendar]) throws -> String {
136136
let serializer = ICalendarSerializer(
137137
options: ICalendarSerializer.SerializationOptions(
138138
validateBeforeSerializing: configuration.validateOnSerialize
139139
)
140140
)
141-
return try await serializer.serialize(calendars)
141+
return try serializer.serialize(calendars)
142142
}
143143

144144
// MARK: - Calendar Creation
@@ -455,15 +455,15 @@ public struct ICalendarClient: Sendable {
455455
// MARK: - Utility Operations
456456

457457
/// Validate a calendar
458-
public func validateCalendar(_ calendar: ICalendar) async throws {
458+
public func validateCalendar(_ calendar: ICalendar) throws {
459459
let parser = ICalendarParser()
460-
try await parser.validate(calendar)
460+
try parser.validate(calendar)
461461
}
462462

463463
/// Get calendar statistics
464-
public func getCalendarStatistics(_ calendar: ICalendar) async -> CalendarStatistics {
464+
public func getCalendarStatistics(_ calendar: ICalendar) -> CalendarStatistics {
465465
let serializer = ICalendarSerializer()
466-
let serializationStats = await serializer.getStatistics(calendar)
466+
let serializationStats = serializer.getStatistics(calendar)
467467

468468
let totalAttendees = calendar.events.reduce(0) { $0 + $1.attendees.count }
469469
let eventsWithAlarms = calendar.events.filter { !$0.alarms.isEmpty }.count
@@ -486,7 +486,7 @@ public struct ICalendarClient: Sendable {
486486
in calendar: ICalendar,
487487
from startDate: Date,
488488
to endDate: Date
489-
) async -> [ICalEvent] {
489+
) -> [ICalEvent] {
490490
calendar.events.filter { event in
491491
guard let eventStart = event.dateTimeStart?.date else { return false }
492492

@@ -854,15 +854,15 @@ public struct CalendarStatistics: Sendable {
854854
extension ICalendarClient {
855855

856856
/// Quick parse from string
857-
public static func parse(_ content: String) async throws -> ICalendar {
857+
public static func parse(_ content: String) throws -> ICalendar {
858858
let client = ICalendarClient()
859-
return try await client.parseCalendar(from: content)
859+
return try client.parseCalendar(from: content)
860860
}
861861

862862
/// Quick serialize to string
863-
public static func serialize(_ calendar: ICalendar) async throws -> String {
863+
public static func serialize(_ calendar: ICalendar) throws -> String {
864864
let client = ICalendarClient()
865-
return try await client.serializeCalendar(calendar)
865+
return try client.serializeCalendar(calendar)
866866
}
867867

868868
/// Create a simple meeting invitation

0 commit comments

Comments
 (0)