-
Breaking:
Score.classic_scoreis now au64instead ofu32- The type
rosu_v2::model::matches::Teamwas renamed toMatchTeam, the variantParsingError::Teamwas renamed toMatchTeam, and added the fieldteam: Option<Team>toUserandUserExtended(#44) - Adjusted fields in the
GameModeAttributesenum (#47) - The method
Osu::user_beatmapsetsnow takes an additionalUserBeatmapsetsKindargument,GetUserBeatmapsets::statuswas replaced bykindandGetUserBeatmapsets::loved,ranked,pending, andgraveyardwere removed (#52) - The method
Osu::tokenis no longer async (#53) - The endpoint structs (e.g.
GetUser,GetBeatmapScores, ...) no longer implementFutureand instead they implementIntoFutureby transforming into the structOsuFuture. Also, methods onOsuthat tooku32user ids now takeInto<UserId>, thebody: Stringfields of theOsuError::ParsingandOsuError::Responsevariants are replaced bybytes: Bytesand the variantOsuError::ServiceUnavailablenow contains abody: hyper::body::Incomingfield instead of an unnamed String (#54) Osu::beatmap_scoresnow returnsBeatmapScoresinstead ofVec<Score>(#55)
-
Additions:
- Added the method
Osu::team_rankings(#45)
- Added the method
-
Adjustments:
- Use proper rfc3339 to (de)serialize datetimes (#49)
-
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
f32tof64forBeatmapDifficultyAttributes::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}_authorizationnow takes an additional argument of typeScopes(#37)- The method
ScoreStatistics::accuracynow takes an additional argumentmax_statistics: &ScoreStatistics - Changed field type from
u32toi32forBeatmapsetVote::score - Bumped
rosu-modsto0.2.0(#40 - @natsukagami) - Bumped
hyperto1.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, andBeatmapsethave been renamed toUserExtended,BeatmapExtended, andBeatmapsetExtended;UserCompact,BeatmapCompact, andBeatmapsetCompacthave been renamed toUser,Beatmap, andBeatmapset- The fields
FailTimes::failandFailTimes::exitare now of typeOption<Box<[u32; 100]>>instead ofOption<Vec<u32>> - Metrics are now recorded using the
metricscrate 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::instructionsis now aOption<String>instead ofString(#12 - @natsukagami) - Removed the method
GetBeatmapsetSearch::any_statusand instead the methodstatusnow takes anOption<RankStatus>;Nonemeans "any". Also renamed the variantBeatmapsetSearchSort::RankedDatetoApprovedDateand added the variantsCreator,Nominations, andLastUpdate. (#18) - Renamed the struct
RecentEventtoEventand the methodOsu::recent_eventstorecent_activity. Also added the methodOsu::events. (#19) - Removed the
Cursortype. The osu!api now uses encoded strings as cursor value. (#20) - The methods
Osu::{replay, replay_raw, score}no longer take aGameModeas argument. Instead, their builders now have amodemethod which allows setting a mode optionally. (#24 - @natsukagami) - Removed the
rkyvfeature (#27) - Added fields:
Beatmap::mapset_idScore::classic_scoreUserExtended::statistics_modes
- Removed the field
BeatmapsetNominations::requiredand addedBeatmapsetNominations::{eligible_main_rulesets, required_meta}.
- All mods types are now re-exports from
-
Fixes:
- Fixed deserializing
FailTimesforBeatmapandBeatmapExtended
- Fixed deserializing
-
Additions:
- The endpoint
Osu::usersis now usable without deprecation warning to retrieve up to 50 users at once. (#16) - Endpoints to retrieve scores now provide a
legacy_scoresmethod to request score data in its legacy format. (#14) - Endpoints to retrieve scores now provide a
legacy_onlymethod to only request non-lazer scores. (#21) - Added the feature
local_oauthto add the methodOsuBuilder::with_local_authorizationto perform the whole OAuth process locally. (#29)
- The endpoint
-
Breaking:
- Added the field
map_idtoScore - Added the fields
descriptionandpermanenttoAccountHistory - Added the variant
TournamentBantoHistoryType - Added the variant
TagsEdittoBeatmapsetEvent - Types no longer implement
serde::Serializeunless theserializefeature is specified (#4) - Replaced the method
GetBeatmapScores::score_typewithGetBeatmapScores::globalandGetBeatmapScores::country
- Added the field
-
Fixes:
- Anticipate
nullwhen deserializing user'sdefault_group
- Anticipate
-
Additions:
- Added the method
GetBeatmapScores::limit - The method
GetBeatmapScores::modsno longer shows the deprecation notice
- Added the method
-
Adjustments:
- Implemented
rkyv::{Archive, Serialize, Deserialize}forBeatmapsetSearchSort
- Implemented
-
Additions:
- Added the method
GameMods::clock_rate - Added
OrdandPartialOrdimplementation forGameMode - Added the method
Osu::replay_rawto request the bytes of a replay. If thereplayfeature is enabled, the new methodOsu::replayrequests 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
passedtoScore(#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_ranktoUserandUserCompact
- Added the field
-
Fixes:
- Fixed deserialization when requesting mapset id 3
- Fixed deserialization of datetimes in comments
-
Breaking changes:
- The serialization of all
OffsetDateTimewas 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::Valuewithout 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
cachefeature 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_attributesto retrieve theBeatmapDifficultyAttributesof a beatmap. - Added method
OsuBuilder::retriesto specify how often requests should be retried in case they timeout. Defaults to 2 i.e. 3 attempts in total. - Added method
OsuBuilder::ratelimitto 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_idto retrieve a mapset using a map ID. (#1 - @Jeglerjeg)
- Breaking changes:
- Renamed the
GameModevariants to make them more idiomatic - Replaced the
chronodependency withtimeso all datetime fields now come from thetimecrate. 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_atis now calledScore::ended_at - The
Score::score_idfield is now of typeOption<u64>instead ofu64 GameModeAttributes::Taikonow has an additional fieldpeak_difficultyand no longer has the fieldar
- Renamed the
-
Breaking:
MatchEvent::Create'suser_idfield is now of typeOption<u32>(previously justu32)Score::replayis now of typeOption<bool>(previously justbool)- Added the field
guest_mapset_counttoUserandUserCompact - Added the field
creator_idtoBeatmapandBeatmapCompact - The field
user_idofCommentis now anOption<u32>instead of justu32. - The method
get_userofCommentnow returnsOption<GetUser<'_>>instead ofGetUser<'_>
-
Fixes:
- Now deserializing
medalrecent events properly - Added deserialization for mods in form of objects
- Now deserializing
- Fixed
Gradecalculation for taikoScores - Added feature
rkyvto provideArchive,Deserialize, andSerializeimpls of rkyv for insanely fast (de)serialization - Bumped dashmap to v5.1.0
- Added
Osu::beatmap_user_scoresto get scores for all mod combinations of a user on a map
- Added method
Osu::beatmapsto retrieve multiple maps at once (up to 50). - Added method
Osu::scoreto retrieve a specific score. - Removed metrics for multiplayer endpoints.
- Added
UserIdto the prelude module - Added
Clone,Eq,PartialEq, andHashimpls forUserId - Improved compile time by removing
build.rsfile - Added method
GetUserScores::pinnedto 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_restrictedandUserCompact::is_restricted
- Added
- [Breaking] Removed
Osumethodsmultiplayer_score,multiplayer_scores, andmultiplayer_user_highscore - [Breaking] All fields representing a username are no longer
StringbutSmallString<[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_nameBeatmapsetCommentOwnerChange.new_usernameBeatmapsetCompact.creator_nameComment.legacy_nameKudosuAction::KudosuGiver.usernameNewsPost.authorEventUser.usernameEventUser.previous_usernameUser::usernameUser::previous_usernamesUserCompact.usernameUserCompact.previous_usernames
- Added
floatmethod toUserLevel - [Breaking] All fields representing a country code are no longer
StringbutSmallString<[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_codeUser.country_codeUserCompact.country_codeGetPerformanceRankings::country
- Dont only consider HD when calculating grade but also Flashlight and FadeIn
- Implemented
DefaultforLanguage,Genre,ScoringType,TeamType, andTeamenums - Made checking for
Scoreequivalency more lenient w.r.t. their timestamps - [Breaking] Removed deprecated
cover_urlfield fromUser; usecover.urlinstead - [Breaking]
descriptionfield ofGroupis nowOption<String>instead ofString - [Breaking] Added new
BeatmapsetEventvariantOwnerChangeand declaredBeatmapsetEventas non-exhaustive - [Breaking]
OsuBuilderno 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
OsuErrorvariants - [Breaking]
UserandUserCompactfieldsranked_and_approved_beatmapset_count,unranked_beatmapset_count,favourite_beatmapset_count,graveyard_beatmapset_count, andloved_beatmapset_countwhere replaced withranked_mapset_count,pending_mapset_count,favourite_mapset_count,graveyard_mapset_count, andloved_mapset_count, respectively - [Breaking]
GetUserBeatmapsetsmethodsranked_and_approvedandunrankedwere replaced withrankedandpending, respectively - [Breaking] Removed
GetUserBeatmapset::favouritemethod
- Initial release