-
Breaking:
- Added field
UserStatistics::rank_change_since_30_days
(#30 - @damaredayo) - Added field
Score::total_score_without_mods
(#31) - Added field
Score::set_on_lazer
- Added field
UserExtended::daily_challenge_stats
(#33) - Changed field types from
f32
tof64
forBeatmapDifficultyAttributes::stars
,GameModeAttributes::Osu::{aim_difficulty, flashlight_difficulty, slider_factor, speed_difficulty}
,GameModeAttributes::Taiko::{stamina_difficulty, rhythm_difficulty, colour_difficulty, peak_difficulty}
(#35) - Added field
GameModeAttributes::Osu::speed_note_count
(#35) - Removed field
GameModeAttributes::Mania::score_multiplier
(#35) OsuBuilder::with{_local}_authorization
now takes an additional argument of typeScopes
(#37)- The method
ScoreStatistics::accuracy
now takes an additional argumentmax_statistics: &ScoreStatistics
- Changed field type from
u32
toi32
forBeatmapsetVote::score
- Bumped
rosu-mods
to0.2.0
(#40 - @natsukagami) - Bumped
hyper
to1.0.0
, as well as a bump forbytes
,http-body-util
,hyper-util
, andhyper-rustls
(#42)
- Added field
-
Additions:
-
Breaking:
- All mods types are now re-exports from
rosu-mods
(#28) User
,Beatmap
, andBeatmapset
have been renamed toUserExtended
,BeatmapExtended
, andBeatmapsetExtended
;UserCompact
,BeatmapCompact
, andBeatmapsetCompact
have been renamed toUser
,Beatmap
, andBeatmapset
- The fields
FailTimes::fail
andFailTimes::exit
are now of typeOption<Box<[u32; 100]>>
instead ofOption<Vec<u32>>
- Metrics are now recorded using the
metrics
crate instead of prometheus directly. That means they're no longer exposed through a method, but are recorded in the global metrics registry instead. You can install a global metrics registry e.g. through the metrics-exporter-prometheus crate. - Most fields of (optional)
User(Extended)
,Beatmap(Extended)
, andBeatmapset(Extended)
are now wrapped in aBox
. (#11) - The field
Medal::instructions
is now aOption<String>
instead ofString
(#12 - @natsukagami) - Removed the method
GetBeatmapsetSearch::any_status
and instead the methodstatus
now takes anOption<RankStatus>
;None
means "any". Also renamed the variantBeatmapsetSearchSort::RankedDate
toApprovedDate
and added the variantsCreator
,Nominations
, andLastUpdate
. (#18) - Renamed the struct
RecentEvent
toEvent
and the methodOsu::recent_events
torecent_activity
. Also added the methodOsu::events
. (#19) - Removed the
Cursor
type. The osu!api now uses encoded strings as cursor value. (#20) - The methods
Osu::{replay, replay_raw, score}
no longer take aGameMode
as argument. Instead, their builders now have amode
method which allows setting a mode optionally. (#24 - @natsukagami) - Removed the
rkyv
feature (#27) - Added fields:
Beatmap::mapset_id
Score::classic_score
UserExtended::statistics_modes
- Removed the field
BeatmapsetNominations::required
and addedBeatmapsetNominations::{eligible_main_rulesets, required_meta}
.
- All mods types are now re-exports from
-
Fixes:
- Fixed deserializing
FailTimes
forBeatmap
andBeatmapExtended
- Fixed deserializing
-
Additions:
- The endpoint
Osu::users
is now usable without deprecation warning to retrieve up to 50 users at once. (#16) - Endpoints to retrieve scores now provide a
legacy_scores
method to request score data in its legacy format. (#14) - Endpoints to retrieve scores now provide a
legacy_only
method to only request non-lazer scores. (#21) - Added the feature
local_oauth
to add the methodOsuBuilder::with_local_authorization
to perform the whole OAuth process locally. (#29)
- The endpoint
-
Breaking:
- Added the field
map_id
toScore
- Added the fields
description
andpermanent
toAccountHistory
- Added the variant
TournamentBan
toHistoryType
- Added the variant
TagsEdit
toBeatmapsetEvent
- Types no longer implement
serde::Serialize
unless theserialize
feature is specified (#4) - Replaced the method
GetBeatmapScores::score_type
withGetBeatmapScores::global
andGetBeatmapScores::country
- Added the field
-
Fixes:
- Anticipate
null
when deserializing user'sdefault_group
- Anticipate
-
Additions:
- Added the method
GetBeatmapScores::limit
- The method
GetBeatmapScores::mods
no longer shows the deprecation notice
- Added the method
-
Adjustments:
- Implemented
rkyv::{Archive, Serialize, Deserialize}
forBeatmapsetSearchSort
- Implemented
-
Additions:
- Added the method
GameMods::clock_rate
- Added
Ord
andPartialOrd
implementation forGameMode
- Added the method
Osu::replay_raw
to request the bytes of a replay. If thereplay
feature is enabled, the new methodOsu::replay
requests the replay and parses it into aosu_db::Replay
. Note that both of these methods require OAuth throughOsuBuilder::with_authorization
. (#2 - @mezo)
- Added the method
-
Breaking:
- Added the field
passed
toScore
(#3 - @Jeglerjeg) - Instead of introducing custom archived types, some types now archive into themselves.
Impacted types are:
Grade
,KudosuAction
,CommentSort
,HistoryType
,Playstyle
,ProfilePage
,BeatmapDifficultyAttributes
, andGameModeAttributes
.
- Added the field
-
Fixes:
- Fixed deserialization of datetimes and made them mode robust against future changes
-
Additions:
- Added the field
highest_rank
toUser
andUserCompact
- Added the field
-
Fixes:
- Fixed deserialization when requesting mapset id 3
- Fixed deserialization of datetimes in comments
-
Breaking changes:
- The serialization of all
OffsetDateTime
was changed. They used to be serialized into the amount of unix timestamp nanoseconds which was an i128. Since those could not be serialized into aserde_json::Value
without significant performance loss, all datetimes are now serialized into a string of the same format given by the osu!api.
- The serialization of all
- Adjustments:
- If the
cache
feature is enabled, the cache now fills proactively and also updates with respect to username changes
- If the
- Additions:
- Added a metric for the amount of Username-UserId pairs that are currently cached
- Added method
Osu::beatmap_difficulty_attributes
to retrieve theBeatmapDifficultyAttributes
of a beatmap. - Added method
OsuBuilder::retries
to specify how often requests should be retried in case they timeout. Defaults to 2 i.e. 3 attempts in total. - Added method
OsuBuilder::ratelimit
to specify how many requests per seconds can be made. Value will be clamped between 1 and 20 and defaults to 15. - Added method
Osu::beatmapset_from_map_id
to retrieve a mapset using a map ID. (#1 - @Jeglerjeg)
- Breaking changes:
- Renamed the
GameMode
variants to make them more idiomatic - Replaced the
chrono
dependency withtime
so all datetime fields now come from thetime
crate. This includes fields being (de)serialized differently. - Now using the specific api version 20220705 which renamed a few fields but only one of those made it through to the interface:
Score::created_at
is now calledScore::ended_at
- The
Score::score_id
field is now of typeOption<u64>
instead ofu64
GameModeAttributes::Taiko
now has an additional fieldpeak_difficulty
and no longer has the fieldar
- Renamed the
-
Breaking:
MatchEvent::Create
'suser_id
field is now of typeOption<u32>
(previously justu32
)Score::replay
is now of typeOption<bool>
(previously justbool
)- Added the field
guest_mapset_count
toUser
andUserCompact
- Added the field
creator_id
toBeatmap
andBeatmapCompact
- The field
user_id
ofComment
is now anOption<u32>
instead of justu32
. - The method
get_user
ofComment
now returnsOption<GetUser<'_>>
instead ofGetUser<'_>
-
Fixes:
- Now deserializing
medal
recent events properly - Added deserialization for mods in form of objects
- Now deserializing
- Fixed
Grade
calculation for taikoScore
s - Added feature
rkyv
to provideArchive
,Deserialize
, andSerialize
impls of rkyv for insanely fast (de)serialization - Bumped dashmap to v5.1.0
- Added
Osu::beatmap_user_scores
to get scores for all mod combinations of a user on a map
- Added method
Osu::beatmaps
to retrieve multiple maps at once (up to 50). - Added method
Osu::score
to retrieve a specific score. - Removed metrics for multiplayer endpoints.
- Added
UserId
to the prelude module - Added
Clone
,Eq
,PartialEq
, andHash
impls forUserId
- Improved compile time by removing
build.rs
file - Added method
GetUserScores::pinned
to retrieve the pinned scores of a user
- Added a bunch of documentation
- [Breaking] Adjusted some struct fields:
- Added
Group::has_modes
- Added
WikiPage::available_locales
- Removed
User::skype
- Removed
User::is_restricted
andUserCompact::is_restricted
- Added
- [Breaking] Removed
Osu
methodsmultiplayer_score
,multiplayer_scores
, andmultiplayer_user_highscore
- [Breaking] All fields representing a username are no longer
String
butSmallString<[u8; 15]>
instead. Since usernames can't be longer than 15 characters, this type will prevent allocations. It's aliased asUsername
. Affected fields are:Beatmapset.creator_name
BeatmapsetCommentOwnerChange.new_username
BeatmapsetCompact.creator_name
Comment.legacy_name
KudosuAction::KudosuGiver.username
NewsPost.author
EventUser.username
EventUser.previous_username
User::username
User::previous_usernames
UserCompact.username
UserCompact.previous_usernames
- Added
float
method toUserLevel
- [Breaking] All fields representing a country code are no longer
String
butSmallString<[u8; 2]>
instead. Since country codes can't be longer than 2 characters, this type will prevent allocations. It's aliased asCountryCode
. Affected fields are:CountryRanking.country_code
User.country_code
UserCompact.country_code
GetPerformanceRankings::country
- Dont only consider HD when calculating grade but also Flashlight and FadeIn
- Implemented
Default
forLanguage
,Genre
,ScoringType
,TeamType
, andTeam
enums - Made checking for
Score
equivalency more lenient w.r.t. their timestamps - [Breaking] Removed deprecated
cover_url
field fromUser
; usecover.url
instead - [Breaking]
description
field ofGroup
is nowOption<String>
instead ofString
- [Breaking] Added new
BeatmapsetEvent
variantOwnerChange
and declaredBeatmapsetEvent
as non-exhaustive - [Breaking]
OsuBuilder
no longer accepts a reqwest client since its now using a hyper client - [Breaking] Removed all endpoint-specific cursor structs and replaced them by a single struct
Cursor
- [Breaking] Adjusted / Renamed / Added some
OsuError
variants - [Breaking]
User
andUserCompact
fieldsranked_and_approved_beatmapset_count
,unranked_beatmapset_count
,favourite_beatmapset_count
,graveyard_beatmapset_count
, andloved_beatmapset_count
where replaced withranked_mapset_count
,pending_mapset_count
,favourite_mapset_count
,graveyard_mapset_count
, andloved_mapset_count
, respectively - [Breaking]
GetUserBeatmapsets
methodsranked_and_approved
andunranked
were replaced withranked
andpending
, respectively - [Breaking] Removed
GetUserBeatmapset::favourite
method
- Initial release